/*
*
* SPDX-License-Identifier: GPL-2.0
*
* Copyright (C) 2011-2018 ARM or its affiliates
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2.
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/

#include "acamera_command_api.h"
//#include "acamera_firmware_api.h"
#include "acamera_firmware_settings.h"
// created from 2016-10-19T16:42:58.865Z UTClinear.json

// CALIBRATION_LIGHT_SRC
static uint16_t _calibration_light_src[][2] = {
    {326, 158}};

// CALIBRATION_RG_POS
static uint16_t _calibration_rg_pos[] = {203, 218, 232, 247, 256, 276, 290, 305, 319, 334, 348, 363, 377, 392, 425};

// CALIBRATION_BG_POS
static uint16_t _calibration_bg_pos[] = {127, 147, 163, 178, 194, 210, 225, 241, 256, 273, 288, 304, 320, 335, 365};

// CALIBRATION_MESH_RGBG_WEIGHT
static uint16_t _calibration_mesh_rgbg_weight[][15] = {
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 39, 256, 256, 217},
    {0, 0, 0, 0, 0, 0, 0, 1, 7, 42, 256, 246, 256, 137, 0},
    {0, 0, 0, 0, 0, 0, 2, 25, 100, 245, 256, 179, 70, 8, 0},
    {0, 0, 0, 0, 0, 4, 38, 188, 256, 256, 173, 34, 3, 0, 0},
    {0, 0, 0, 0, 2, 62, 235, 256, 256, 135, 25, 2, 0, 0, 0},
    {0, 0, 0, 10, 41, 256, 256, 256, 110, 17, 1, 0, 0, 0, 0},
    {0, 0, 12, 117, 250, 256, 256, 67, 9, 1, 0, 0, 0, 0, 0},
    {0, 6, 83, 256, 256, 204, 49, 5, 0, 0, 0, 0, 0, 0, 0},
    {3, 68, 256, 256, 253, 22, 2, 0, 0, 0, 0, 0, 0, 0, 0},
    {7, 166, 256, 182, 62, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {15, 256, 256, 37, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {20, 256, 111, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {4, 256, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {2, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};

// CALIBRATION_MESH_LS_WEIGHT
static uint16_t _calibration_mesh_ls_weight[][15] = {
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 3, 4, 25, 42, 53, 57, 53, 42, 25, 4, 3, 0, 0},
    {0, 0, 4, 131, 157, 179, 193, 198, 193, 179, 157, 131, 4, 0, 0},
    {0, 0, 25, 157, 188, 214, 232, 238, 232, 214, 188, 157, 25, 0, 0},
    {0, 0, 42, 179, 214, 243, 255, 256, 255, 243, 214, 179, 42, 0, 0},
    {0, 0, 53, 193, 232, 255, 256, 256, 256, 255, 232, 193, 53, 0, 0},
    {0, 0, 57, 198, 238, 256, 256, 256, 256, 256, 238, 198, 57, 0, 0},
    {0, 0, 53, 193, 232, 255, 256, 256, 256, 255, 232, 193, 53, 0, 0},
    {0, 0, 42, 179, 214, 243, 255, 256, 255, 243, 214, 179, 42, 0, 0},
    {0, 0, 25, 157, 188, 214, 232, 238, 232, 214, 188, 157, 25, 0, 0},
    {0, 0, 4, 131, 157, 179, 193, 198, 193, 179, 157, 131, 4, 0, 0},
    {0, 0, 3, 4, 25, 42, 53, 57, 53, 42, 25, 4, 3, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};

// CALIBRATION_MESH_COLOR_TEMPERATURE
static uint16_t _calibration_mesh_color_temperature[][15] = {
    {230, 239, 247, 255, 260, 263, 265, 267, 269, 272, 301, 332, 347, 364, 369},
    {220, 229, 237, 245, 250, 262, 263, 265, 267, 269, 277, 308, 337, 354, 369},
    {212, 220, 229, 237, 242, 254, 262, 263, 265, 267, 269, 289, 318, 346, 369},
    {204, 213, 221, 230, 235, 246, 254, 262, 263, 265, 267, 271, 300, 331, 369},
    {196, 205, 213, 222, 227, 238, 246, 255, 262, 264, 266, 268, 281, 312, 369},
    {196, 197, 205, 213, 219, 230, 238, 247, 255, 262, 264, 266, 268, 293, 369},
    {187, 196, 197, 206, 211, 223, 231, 239, 247, 256, 263, 265, 266, 269, 353},
    {174, 184, 192, 198, 203, 215, 223, 231, 239, 248, 256, 263, 265, 267, 324},
    {163, 172, 181, 190, 196, 207, 215, 224, 232, 240, 248, 257, 263, 265, 306},
    {158, 159, 168, 177, 182, 198, 206, 215, 223, 232, 240, 248, 256, 264, 268},
    {150, 153, 156, 165, 171, 183, 199, 208, 216, 224, 232, 241, 249, 257, 267},
    {140, 143, 146, 150, 152, 171, 179, 189, 208, 216, 224, 233, 241, 249, 265},
    {132, 133, 134, 139, 141, 146, 149, 176, 185, 208, 216, 225, 233, 241, 263},
    {121, 122, 123, 124, 124, 126, 127, 143, 146, 183, 209, 217, 225, 234, 253},
    {111, 111, 111, 111, 111, 111, 111, 111, 111, 160, 168, 137, 210, 219, 238}};

// RG, BG, MULT. final wb gain adjuster for a sky scene. devided by CALIBRATION_WB_STRENGTH_MULT in use
static uint16_t _calibration_wb_strength[] = {1000, 1000, 1000};

// lux threshold for sky
static uint16_t _calibration_sky_lux_th[] = {10000};

// 1D rg/bg readout from color_temp
static uint16_t _calibration_ct_rg_pos_calc[] = {218, 221, 232, 256, 322, 358, 384, 406};

// 1D rg/bg readout from color_temp
static uint16_t _calibration_ct_bg_pos_calc[] = {350, 317, 287, 256, 200, 171, 157, 148};

// CALIBRATION_COLOR_TEMP
static uint16_t _calibration_color_temp[] = {111, 136, 158, 196, 262, 270, 341, 369};

// CALIBRATION_CT65POS
static uint16_t _calibration_ct65pos[] = {2};

// CALIBRATION_CT40POS
static uint16_t _calibration_ct40pos[] = {7};

// CALIBRATION_CT30POS
static uint16_t _calibration_ct30pos[] = {6};

// CALIBRATION_EVTOLUX_EV_LUT
static uint32_t _calibration_evtolux_ev_lut[] //evlog2
    = {398775, 444491, 477818, 528405, 620780, 744998, 821797, 1051295, 1308509, 1373840, 1436952, 1573912, 1656816, 1918045, 2075972, 2322504, 2494615};

// CALIBRATION_EVTOLUX_LUX_LUT
static uint32_t _calibration_evtolux_lux_lut[] = {20000, 18000, 16000, 14000, 12000, 10100, 8900, 5120, 2560, 2080, 1800, 1200, 1000, 500, 320, 160, 100};


// CALIBRATION_BLACK_LEVEL_R
static uint16_t _calibration_black_level_r[][2] = {
    {0, 256},
    {32, 256},
    {64, 256},
    {96, 256},
    {128, 256}};

// CALIBRATION_BLACK_LEVEL_GR
static uint16_t _calibration_black_level_gr[][2] = {
    {0, 256},
    {32, 256},
    {64, 256},
    {96, 256},
    {128, 256}};

// CALIBRATION_BLACK_LEVEL_GB
static uint16_t _calibration_black_level_gb[][2] = {
    {0, 256},
    {32, 256},
    {64, 256},
    {96, 256},
    {128, 256}};

// CALIBRATION_BLACK_LEVEL_B
static uint16_t _calibration_black_level_b[][2] = {
    {0, 256},
    {32, 256},
    {64, 256},
    {96, 256},
    {128, 256}};

// CALIBRATION_STATIC_WB
static uint16_t _calibration_static_wb[] = {501, 256, 256, 448};
// RR RG RB GR GG GB BR BG BB
static uint16_t _calibration_mt_absolute_ls_a_ccm[] = {384, 32864, 32800, 32881, 377, 32776, 24, 33176, 640};

// RR RG RB GR GG GB BR BG BB
static uint16_t _calibration_mt_absolute_ls_d40_ccm[] = {419, 32901, 32798, 32869, 374, 32785, 34, 33040, 494};

// RR RG RB GR GG GB BR BG BB
static uint16_t _calibration_mt_absolute_ls_d50_ccm[] = {416, 32907, 32789, 32837, 392, 32835, 23, 32963, 428};

// CALIBRATION_SHADING_LS_A_R
static uint8_t _calibration_shading_ls_a_r[] = {168, 147, 132, 121, 114, 107, 102, 97, 93, 89, 86, 84, 82, 80, 80, 79, 80, 80, 81, 83, 85, 87, 91, 95, 99, 104, 111, 118, 128, 142, 163, 198, 161, 142, 128, 118, 111, 105, 99, 95, 91, 87, 84, 82, 80, 79, 78, 77, 78, 78, 79, 81, 83, 85, 89, 92, 97, 102, 108, 115, 125, 137, 158, 186, 154, 138, 125, 115, 108, 102, 97, 92, 88, 85, 82, 80, 78, 77, 76, 75, 76, 76, 77, 79, 81, 83, 86, 90, 94, 100, 106, 113, 121, 133, 151, 175, 148, 133, 122, 113, 106, 100, 95, 90, 86, 83, 80, 78, 76, 75, 74, 74, 74, 74, 75, 77, 79, 81, 84, 88, 93, 97, 103, 110, 118, 129, 145, 167, 143, 130, 119, 111, 104, 98, 93, 88, 85, 81, 78, 76, 74, 73, 72, 72, 72, 73, 74, 75, 77, 79, 83, 86, 91, 96, 101, 108, 116, 126, 141, 160, 140, 127, 116, 109, 102, 96, 91, 87, 83, 80, 77, 75, 73, 72, 71, 70, 71, 71, 72, 74, 76, 78, 81, 85, 89, 94, 99, 106, 113, 123, 137, 155, 137, 125, 115, 107, 100, 95, 90, 85, 82, 78, 75, 73, 72, 70, 70, 69, 69, 70, 71, 72, 74, 77, 80, 83, 88, 92, 98, 104, 112, 121, 134, 151, 134, 122, 113, 105, 99, 93, 88, 84, 80, 77, 74, 72, 70, 69, 68, 68, 68, 69, 70, 71, 73, 75, 78, 82, 86, 91, 96, 102, 110, 119, 131, 147, 132, 121, 111, 104, 98, 92, 87, 83, 79, 76, 73, 71, 69, 68, 67, 67, 67, 68, 69, 70, 72, 74, 77, 81, 85, 90, 95, 101, 108, 118, 129, 145, 131, 120, 110, 103, 97, 91, 86, 82, 78, 75, 72, 70, 68, 67, 66, 66, 66, 67, 68, 69, 71, 73, 76, 80, 84, 89, 94, 100, 107, 116, 128, 142, 129, 118, 109, 102, 96, 90, 85, 81, 77, 74, 71, 69, 68, 66, 66, 65, 66, 66, 67, 68, 70, 72, 75, 79, 83, 88, 93, 99, 106, 115, 126, 141, 128, 117, 108, 101, 95, 89, 85, 80, 76, 73, 71, 68, 67, 66, 65, 65, 65, 65, 66, 68, 69, 72, 75, 78, 82, 87, 92, 98, 106, 114, 125, 139, 127, 117, 108, 101, 95, 89, 84, 80, 76, 73, 70, 68, 66, 65, 65, 65, 65, 65, 66, 67, 69, 71, 74, 78, 82, 86, 92, 98, 105, 114, 125, 138, 127, 116, 108, 100, 94, 89, 84, 79, 76, 72, 70, 68, 66, 65, 65, 64, 64, 65, 66, 67, 69, 71, 74, 77, 81, 86, 91, 98, 105, 113, 124, 138, 126, 116, 107, 100, 94, 88, 83, 79, 75, 72, 70, 67, 66, 65, 64, 64, 64, 65, 65, 67, 68, 71, 73, 77, 81, 86, 91, 97, 104, 113, 124, 138, 126, 116, 107, 100, 94, 88, 83, 79, 75, 72, 70, 67, 66, 65, 64, 64, 64, 65, 65, 67, 68, 71, 73, 77, 81, 86, 91, 97, 104, 113, 124, 138, 126, 116, 107, 100, 94, 88, 84, 79, 75, 72, 70, 68, 66, 65, 64, 64, 64, 65, 66, 67, 68, 71, 74, 77, 81, 86, 91, 97, 105, 113, 124, 138, 127, 116, 108, 101, 94, 89, 84, 79, 76, 72, 70, 68, 66, 65, 64, 64, 64, 65, 66, 67, 69, 71, 74, 77, 81, 86, 91, 98, 105, 113, 125, 139, 127, 117, 108, 101, 95, 89, 84, 80, 76, 73, 70, 68, 67, 65, 65, 65, 65, 65, 66, 67, 69, 71, 74, 77, 81, 86, 92, 98, 105, 114, 125, 140, 128, 118, 109, 102, 95, 90, 85, 80, 77, 74, 71, 69, 67, 66, 65, 65, 65, 66, 66, 68, 70, 72, 75, 78, 82, 87, 92, 99, 106, 115, 126, 141, 129, 118, 110, 102, 96, 90, 85, 81, 77, 74, 72, 70, 68, 67, 66, 66, 66, 66, 67, 68, 70, 72, 75, 79, 83, 88, 93, 99, 107, 116, 128, 143, 131, 120, 111, 103, 97, 91, 86, 82, 78, 75, 73, 70, 69, 68, 67, 66, 67, 67, 68, 69, 71, 73, 76, 80, 84, 89, 94, 100, 108, 117, 129, 145, 133, 121, 112, 105, 98, 93, 88, 83, 79, 76, 74, 71, 70, 68, 68, 67, 68, 68, 69, 70, 72, 74, 77, 81, 85, 90, 95, 102, 109, 119, 131, 148, 135, 123, 114, 106, 99, 94, 89, 84, 81, 77, 75, 73, 71, 70, 69, 68, 69, 69, 70, 71, 73, 75, 78, 82, 86, 91, 96, 103, 111, 121, 134, 151, 138, 125, 115, 107, 101, 95, 90, 86, 82, 79, 76, 74, 72, 71, 70, 70, 70, 70, 71, 73, 74, 77, 80, 83, 87, 92, 98, 104, 112, 123, 136, 154, 141, 128, 117, 109, 102, 97, 91, 87, 83, 80, 77, 75, 74, 72, 71, 71, 71, 72, 73, 74, 76, 78, 81, 85, 89, 94, 100, 106, 115, 125, 140, 159, 145, 131, 119, 111, 104, 98, 93, 89, 85, 82, 79, 77, 75, 74, 73, 73, 73, 73, 74, 75, 77, 80, 83, 86, 91, 96, 101, 108, 117, 128, 143, 163, 149, 134, 122, 113, 106, 100, 95, 90, 87, 83, 80, 78, 77, 75, 74, 74, 74, 75, 76, 77, 79, 81, 84, 88, 92, 97, 103, 110, 119, 131, 147, 168, 155, 138, 125, 116, 108, 102, 97, 93, 88, 85, 82, 80, 78, 77, 76, 76, 76, 76, 77, 79, 81, 83, 86, 90, 94, 100, 106, 113, 123, 135, 152, 176, 161, 143, 130, 119, 111, 104, 99, 94, 90, 87, 84, 

82, 80, 79, 78, 78, 78, 78, 79, 81, 82, 85, 88, 92, 97, 102, 108, 116, 126, 140, 159, 185, 171, 150, 134, 122, 114, 107, 101, 97, 93, 89, 86, 84, 82, 81, 80, 80, 80, 80, 81, 83, 85, 87, 90, 94, 99, 104, 111, 119, 130, 145, 169, 202, 182, 156, 137, 126, 117, 110, 104, 99, 95, 91, 88, 86, 84, 83, 82, 82, 82, 82, 83, 85, 87, 89, 93, 97, 102, 107, 114, 123, 134, 150, 177, 220};

// CALIBRATION_SHADING_LS_A_G
static uint8_t _calibration_shading_ls_a_g[] = {138, 122, 111, 103, 98, 93, 89, 86, 83, 80, 78, 77, 76, 75, 74, 74, 74, 74, 75, 76, 77, 79, 81, 83, 86, 90, 94, 99, 106, 116, 132, 156, 133, 120, 109, 102, 96, 91, 88, 84, 82, 79, 77, 76, 74, 74, 73, 73, 73, 73, 74, 75, 76, 78, 80, 82, 85, 88, 93, 98, 104, 113, 128, 148, 127, 116, 106, 100, 94, 90, 86, 83, 80, 78, 76, 74, 73, 72, 72, 71, 71, 72, 73, 73, 75, 76, 78, 81, 84, 87, 91, 96, 102, 110, 123, 140, 123, 113, 104, 98, 93, 88, 85, 81, 79, 76, 75, 73, 72, 71, 70, 70, 70, 71, 71, 72, 73, 75, 77, 80, 82, 85, 89, 94, 100, 107, 119, 134, 120, 110, 102, 96, 91, 87, 83, 80, 77, 75, 73, 72, 71, 70, 69, 69, 69, 70, 70, 71, 72, 74, 76, 78, 81, 84, 88, 92, 98, 105, 115, 129, 117, 108, 100, 95, 90, 86, 82, 79, 76, 74, 72, 71, 70, 69, 68, 68, 68, 69, 69, 70, 71, 73, 75, 77, 80, 83, 87, 91, 96, 103, 113, 125, 115, 106, 99, 93, 89, 85, 81, 78, 76, 73, 72, 70, 69, 68, 68, 67, 67, 68, 68, 69, 70, 72, 74, 76, 79, 82, 86, 90, 95, 101, 110, 122, 113, 105, 98, 92, 88, 84, 80, 77, 75, 72, 71, 69, 68, 67, 67, 67, 67, 67, 68, 68, 70, 71, 73, 75, 78, 81, 85, 89, 93, 100, 108, 119, 112, 103, 97, 91, 87, 83, 79, 76, 74, 72, 70, 69, 67, 67, 66, 66, 66, 66, 67, 68, 69, 70, 72, 75, 77, 80, 84, 88, 93, 98, 107, 117, 110, 103, 96, 91, 86, 82, 79, 76, 73, 71, 69, 68, 67, 66, 66, 65, 65, 66, 66, 67, 68, 70, 72, 74, 77, 80, 83, 87, 92, 98, 106, 116, 109, 102, 95, 90, 85, 81, 78, 75, 73, 71, 69, 67, 66, 65, 65, 65, 65, 65, 66, 67, 68, 69, 71, 73, 76, 79, 82, 86, 91, 97, 105, 114, 108, 101, 94, 89, 85, 81, 77, 75, 72, 70, 68, 67, 66, 65, 65, 64, 65, 65, 65, 66, 67, 69, 71, 73, 75, 78, 82, 86, 90, 96, 104, 113, 108, 100, 94, 89, 84, 81, 77, 74, 72, 70, 68, 67, 66, 65, 64, 64, 64, 65, 65, 66, 67, 68, 70, 73, 75, 78, 81, 85, 90, 96, 103, 112, 107, 100, 94, 89, 84, 80, 77, 74, 72, 70, 68, 66, 65, 65, 64, 64, 64, 65, 65, 66, 67, 68, 70, 72, 75, 78, 81, 85, 90, 96, 103, 112, 107, 100, 94, 88, 84, 80, 77, 74, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 65, 65, 67, 68, 70, 72, 75, 78, 81, 85, 90, 95, 103, 112, 107, 100, 94, 88, 84, 80, 77, 74, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 65, 65, 67, 68, 70, 72, 75, 78, 81, 85, 90, 95, 103, 112, 107, 100, 94, 88, 84, 80, 77, 74, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 65, 65, 67, 68, 70, 72, 75, 78, 81, 85, 90, 95, 103, 112, 107, 100, 94, 89, 84, 80, 77, 74, 72, 70, 68, 66, 65, 65, 64, 64, 64, 64, 65, 66, 67, 68, 70, 72, 75, 78, 81, 85, 90, 96, 103, 113, 108, 100, 94, 89, 84, 81, 77, 74, 72, 70, 68, 67, 66, 65, 64, 64, 64, 65, 65, 66, 67, 68, 70, 72, 75, 78, 82, 86, 90, 96, 104, 113, 109, 101, 95, 89, 85, 81, 78, 75, 72, 70, 68, 67, 66, 65, 65, 65, 65, 65, 65, 66, 67, 69, 71, 73, 75, 79, 82, 86, 91, 97, 104, 114, 109, 102, 95, 90, 85, 81, 78, 75, 73, 71, 69, 68, 66, 66, 65, 65, 65, 65, 66, 67, 68, 69, 71, 73, 76, 79, 82, 86, 91, 97, 105, 115, 110, 102, 96, 91, 86, 82, 79, 76, 73, 71, 70, 68, 67, 66, 66, 65, 65, 66, 66, 67, 68, 70, 72, 74, 76, 80, 83, 87, 92, 98, 106, 117, 112, 104, 97, 91, 87, 83, 79, 77, 74, 72, 70, 69, 68, 67, 66, 66, 66, 66, 67, 68, 69, 71, 72, 75, 77, 80, 84, 88, 93, 99, 108, 119, 113, 105, 98, 92, 88, 84, 80, 77, 75, 73, 71, 70, 68, 68, 67, 67, 67, 67, 68, 69, 70, 71, 73, 75, 78, 81, 85, 89, 94, 100, 110, 121, 115, 106, 99, 93, 89, 85, 81, 78, 76, 74, 72, 70, 69, 68, 68, 68, 68, 68, 68, 69, 71, 72, 74, 76, 79, 82, 86, 90, 95, 102, 112, 124, 118, 109, 101, 95, 90, 86, 82, 79, 77, 75, 73, 71, 70, 69, 69, 69, 69, 69, 69, 70, 71, 73, 75, 77, 80, 83, 87, 91, 96, 104, 114, 127, 121, 111, 102, 96, 91, 87, 83, 80, 78, 76, 74, 72, 71, 70, 70, 70, 70, 70, 70, 71, 72, 74, 76, 78, 81, 84, 88, 92, 98, 106, 117, 131, 125, 114, 104, 98, 92, 88, 85, 82, 79, 77, 75, 73, 72, 71, 71, 71, 71, 71, 71, 72, 73, 75, 77, 79, 82, 85, 89, 94, 100, 108, 120, 135, 129, 117, 107, 100, 94, 90, 86, 83, 80, 78, 76, 75, 74, 73, 72, 72, 72, 72, 73, 74, 75, 76, 78, 81, 84, 87, 91, 96, 102, 112, 123, 140, 133, 120, 110, 102, 96, 91, 88, 84, 82, 79, 77, 76, 75, 74, 73, 73, 73, 73, 74, 75, 76, 78, 80, 82, 85, 89, 93, 98, 105, 115, 128, 146, 140, 125, 113, 104, 98, 93, 89, 86, 83, 81, 79

, 77, 76, 75, 75, 74, 74, 75, 75, 76, 77, 79, 81, 84, 87, 90, 95, 100, 108, 118, 136, 158, 147, 129, 115, 107, 100, 95, 91, 88, 85, 82, 80, 79, 77, 77, 76, 76, 76, 76, 77, 77, 79, 80, 82, 85, 88, 92, 96, 102, 110, 122, 141, 171};

// CALIBRATION_SHADING_LS_A_B
static uint8_t _calibration_shading_ls_a_b[] = {123, 111, 101, 94, 89, 85, 82, 80, 77, 76, 74, 74, 73, 72, 72, 71, 72, 72, 72, 73, 74, 76, 77, 79, 82, 84, 88, 92, 98, 106, 120, 139, 119, 109, 100, 93, 89, 85, 82, 79, 77, 75, 74, 73, 72, 71, 71, 71, 71, 71, 72, 73, 74, 75, 77, 78, 81, 84, 87, 91, 96, 105, 117, 133, 115, 106, 98, 92, 87, 84, 81, 78, 76, 74, 73, 72, 71, 71, 70, 70, 70, 71, 71, 72, 73, 74, 76, 78, 80, 83, 86, 90, 95, 102, 113, 127, 112, 103, 96, 91, 86, 83, 80, 78, 76, 74, 72, 71, 71, 70, 70, 70, 70, 70, 71, 71, 72, 74, 75, 77, 79, 82, 85, 88, 93, 100, 110, 122, 109, 101, 94, 89, 85, 81, 79, 76, 75, 73, 72, 71, 70, 69, 69, 69, 69, 69, 70, 71, 72, 73, 74, 76, 78, 81, 84, 87, 91, 97, 107, 118, 106, 99, 93, 88, 84, 81, 78, 76, 74, 72, 71, 70, 69, 69, 68, 68, 68, 68, 69, 70, 71, 72, 74, 76, 78, 80, 83, 86, 90, 96, 104, 114, 104, 97, 92, 87, 83, 80, 77, 75, 73, 72, 70, 69, 68, 68, 67, 67, 67, 68, 68, 69, 70, 71, 73, 75, 77, 79, 82, 85, 89, 94, 102, 111, 102, 96, 91, 86, 82, 79, 76, 74, 72, 71, 70, 68, 68, 67, 67, 67, 67, 67, 68, 68, 69, 71, 72, 74, 76, 79, 81, 84, 88, 93, 100, 109, 101, 95, 90, 85, 81, 78, 76, 74, 72, 70, 69, 68, 67, 66, 66, 66, 66, 66, 67, 68, 69, 70, 72, 74, 76, 78, 81, 84, 87, 92, 99, 107, 100, 94, 89, 85, 81, 78, 75, 73, 71, 70, 68, 67, 67, 66, 66, 66, 66, 66, 66, 67, 68, 69, 71, 73, 75, 78, 80, 83, 87, 91, 98, 106, 99, 93, 88, 84, 80, 77, 75, 73, 71, 69, 68, 67, 66, 65, 65, 65, 65, 65, 66, 67, 67, 69, 70, 72, 75, 77, 80, 83, 86, 91, 97, 104, 98, 93, 88, 83, 80, 77, 74, 72, 70, 69, 67, 66, 66, 65, 65, 65, 65, 65, 65, 66, 67, 68, 70, 72, 74, 77, 79, 82, 86, 90, 96, 103, 98, 92, 87, 83, 80, 77, 74, 72, 70, 68, 67, 66, 65, 65, 65, 65, 65, 65, 65, 66, 67, 68, 70, 71, 74, 76, 79, 82, 86, 90, 96, 103, 98, 92, 87, 83, 80, 76, 74, 72, 70, 68, 67, 66, 65, 65, 64, 64, 64, 65, 65, 66, 67, 68, 69, 71, 73, 76, 79, 82, 85, 90, 96, 103, 97, 92, 87, 83, 79, 76, 74, 71, 69, 68, 67, 66, 65, 64, 64, 64, 64, 64, 65, 65, 66, 68, 69, 71, 73, 76, 79, 82, 85, 90, 95, 103, 97, 92, 87, 83, 79, 76, 74, 71, 70, 68, 67, 66, 65, 64, 64, 64, 64, 65, 65, 65, 66, 68, 69, 71, 73, 76, 79, 82, 85, 90, 96, 102, 97, 92, 87, 83, 79, 76, 74, 72, 70, 68, 67, 66, 65, 64, 64, 64, 64, 65, 65, 65, 66, 68, 69, 71, 73, 76, 79, 82, 85, 90, 96, 103, 97, 92, 87, 83, 79, 76, 74, 72, 70, 68, 67, 66, 65, 65, 64, 64, 64, 65, 65, 65, 66, 68, 69, 71, 73, 76, 79, 82, 85, 90, 96, 103, 98, 92, 87, 83, 80, 76, 74, 72, 70, 68, 67, 66, 65, 65, 64, 64, 65, 65, 65, 66, 67, 68, 69, 71, 74, 76, 79, 82, 86, 90, 96, 104, 98, 93, 88, 84, 80, 77, 74, 72, 70, 69, 68, 67, 66, 65, 65, 65, 65, 65, 65, 66, 67, 68, 70, 72, 74, 76, 79, 82, 86, 91, 97, 104, 99, 93, 88, 84, 80, 77, 75, 73, 71, 69, 68, 67, 66, 65, 65, 65, 65, 65, 66, 66, 67, 69, 70, 72, 74, 77, 79, 83, 86, 91, 97, 105, 100, 94, 89, 85, 81, 78, 75, 73, 71, 70, 68, 67, 67, 66, 65, 65, 65, 66, 66, 67, 68, 69, 71, 73, 75, 77, 80, 83, 87, 92, 98, 106, 101, 95, 90, 85, 82, 79, 76, 74, 72, 70, 69, 68, 67, 67, 66, 66, 66, 66, 67, 67, 69, 70, 71, 73, 75, 78, 81, 84, 88, 93, 100, 108, 103, 96, 91, 86, 82, 79, 77, 74, 73, 71, 70, 69, 68, 67, 67, 67, 67, 67, 68, 68, 69, 71, 72, 74, 76, 78, 81, 84, 88, 94, 101, 110, 105, 98, 92, 87, 83, 80, 77, 75, 73, 72, 71, 70, 69, 68, 68, 67, 67, 68, 68, 69, 70, 71, 73, 74, 77, 79, 82, 85, 89, 95, 103, 113, 107, 99, 93, 88, 84, 81, 78, 76, 74, 73, 71, 71, 70, 69, 68, 68, 68, 69, 69, 70, 71, 72, 74, 76, 78, 80, 83, 86, 90, 96, 105, 115, 110, 101, 94, 89, 85, 82, 79, 77, 75, 74, 72, 71, 70, 70, 69, 69, 69, 69, 70, 71, 71, 73, 74, 76, 79, 81, 84, 87, 92, 98, 107, 119, 113, 103, 96, 91, 86, 83, 80, 78, 76, 74, 73, 72, 71, 71, 70, 70, 70, 70, 71, 71, 72, 74, 75, 77, 79, 82, 85, 88, 93, 100, 110, 122, 116, 106, 98, 92, 87, 84, 81, 79, 77, 75, 74, 73, 72, 71, 71, 71, 71, 71, 71, 72, 73, 74, 76, 78, 80, 83, 86, 90, 95, 103, 113, 127, 119, 109, 101, 93, 89, 85, 82, 79, 78, 76, 74, 73, 73, 72, 72, 71, 72, 72, 72, 73, 74, 75, 77, 79, 81, 83, 87, 91, 97, 106, 117, 131, 125, 113, 103, 95, 90, 86, 83, 80, 78, 76, 75, 74, 73, 73, 72, 72, 72, 72, 73, 73, 74, 76, 77, 79, 82, 85, 88, 93, 99, 
108, 122, 140, 130, 116, 104, 97, 91, 87, 83, 81, 79, 77, 76, 75, 74, 73, 73, 73, 73, 73, 73, 74, 75, 76, 78, 80, 82, 85, 89, 94, 101, 110, 126, 149};

// CALIBRATION_SHADING_LS_TL84_R
static uint8_t _calibration_shading_ls_tl84_r[] = {144, 127, 115, 107, 101, 96, 92, 89, 86, 83, 81, 79, 78, 76, 76, 76, 76, 76, 77, 78, 80, 82, 84, 87, 91, 95, 99, 105, 112, 123, 141, 167, 137, 123, 112, 105, 99, 94, 90, 87, 84, 81, 79, 77, 76, 75, 74, 74, 74, 75, 76, 77, 78, 80, 82, 85, 89, 93, 97, 103, 110, 120, 136, 158, 131, 119, 109, 102, 97, 92, 89, 85, 82, 80, 77, 76, 74, 73, 73, 73, 73, 73, 74, 75, 76, 78, 81, 84, 87, 91, 95, 100, 107, 116, 130, 149, 127, 116, 107, 100, 95, 91, 87, 84, 81, 78, 76, 74, 73, 72, 71, 71, 71, 72, 72, 74, 75, 77, 79, 82, 85, 89, 93, 98, 105, 113, 126, 142, 123, 113, 104, 98, 93, 89, 86, 82, 79, 77, 75, 73, 72, 71, 70, 70, 70, 71, 71, 72, 74, 76, 78, 81, 84, 88, 92, 97, 103, 111, 122, 137, 120, 111, 103, 97, 92, 88, 84, 81, 78, 76, 74, 72, 71, 70, 69, 69, 69, 69, 70, 71, 73, 74, 77, 80, 83, 86, 90, 95, 101, 109, 119, 133, 118, 109, 101, 96, 91, 87, 83, 80, 77, 75, 73, 71, 69, 69, 68, 68, 68, 68, 69, 70, 72, 73, 76, 78, 82, 85, 89, 94, 100, 107, 117, 130, 115, 107, 100, 94, 90, 86, 82, 79, 76, 74, 72, 70, 69, 68, 67, 67, 67, 67, 68, 69, 71, 72, 75, 77, 81, 84, 88, 93, 98, 105, 115, 127, 114, 106, 99, 93, 89, 85, 81, 78, 75, 73, 71, 69, 68, 67, 66, 66, 66, 67, 67, 68, 70, 72, 74, 76, 80, 83, 87, 92, 97, 104, 113, 125, 113, 105, 98, 93, 88, 84, 80, 77, 74, 72, 70, 68, 67, 66, 66, 65, 66, 66, 67, 68, 69, 71, 73, 76, 79, 83, 86, 91, 96, 103, 112, 123, 112, 104, 97, 92, 87, 83, 80, 76, 74, 71, 69, 68, 66, 66, 65, 65, 65, 65, 66, 67, 68, 70, 72, 75, 78, 82, 86, 90, 96, 102, 111, 122, 111, 103, 96, 91, 87, 83, 79, 76, 73, 71, 69, 67, 66, 65, 65, 65, 65, 65, 65, 66, 68, 70, 72, 74, 78, 81, 85, 90, 95, 102, 110, 121, 110, 102, 96, 91, 86, 82, 79, 75, 73, 70, 68, 67, 65, 65, 64, 64, 64, 65, 65, 66, 67, 69, 71, 74, 77, 81, 85, 89, 95, 101, 110, 120, 109, 102, 96, 91, 86, 82, 78, 75, 72, 70, 68, 66, 65, 65, 64, 64, 64, 64, 65, 66, 67, 69, 71, 74, 77, 80, 84, 89, 94, 101, 109, 120, 109, 102, 96, 90, 86, 82, 78, 75, 72, 70, 68, 66, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 71, 73, 77, 80, 84, 89, 94, 101, 109, 119, 109, 102, 95, 90, 86, 82, 78, 75, 72, 70, 68, 66, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 71, 73, 76, 80, 84, 89, 94, 101, 109, 119, 109, 102, 95, 90, 86, 82, 78, 75, 72, 70, 68, 66, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 71, 73, 76, 80, 84, 89, 94, 101, 109, 120, 110, 102, 96, 91, 86, 82, 78, 75, 72, 70, 68, 66, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 71, 74, 77, 80, 84, 89, 94, 101, 109, 120, 110, 102, 96, 91, 86, 82, 78, 75, 72, 70, 68, 67, 65, 65, 64, 64, 64, 65, 65, 66, 67, 69, 71, 74, 77, 81, 85, 89, 95, 101, 110, 121, 111, 103, 97, 91, 87, 82, 79, 76, 73, 70, 69, 67, 66, 65, 65, 65, 65, 65, 65, 66, 68, 70, 72, 74, 77, 81, 85, 90, 95, 102, 111, 122, 111, 104, 97, 92, 87, 83, 79, 76, 73, 71, 69, 68, 66, 66, 65, 65, 65, 65, 66, 67, 68, 70, 72, 75, 78, 82, 86, 90, 96, 103, 112, 123, 112, 104, 98, 92, 88, 84, 80, 77, 74, 72, 70, 68, 67, 66, 66, 65, 65, 66, 67, 68, 69, 71, 73, 75, 79, 82, 86, 91, 97, 104, 113, 125, 114, 106, 99, 93, 88, 84, 81, 78, 75, 72, 71, 69, 68, 67, 66, 66, 66, 67, 67, 68, 70, 71, 74, 76, 79, 83, 87, 92, 98, 105, 115, 127, 116, 107, 100, 94, 89, 85, 82, 78, 76, 73, 71, 70, 68, 68, 67, 67, 67, 67, 68, 69, 71, 72, 74, 77, 80, 84, 88, 93, 99, 106, 116, 129, 118, 108, 101, 95, 90, 86, 83, 79, 77, 74, 72, 71, 69, 69, 68, 68, 68, 68, 69, 70, 71, 73, 75, 78, 81, 85, 89, 94, 100, 108, 118, 132, 120, 110, 102, 96, 92, 87, 84, 80, 78, 75, 73, 72, 70, 69, 69, 69, 69, 69, 70, 71, 72, 74, 76, 79, 82, 86, 90, 95, 101, 110, 121, 135, 124, 113, 104, 98, 93, 88, 85, 81, 79, 76, 74, 73, 71, 70, 70, 70, 70, 70, 71, 72, 73, 75, 77, 80, 84, 87, 92, 97, 103, 112, 123, 139, 127, 115, 106, 99, 94, 90, 86, 83, 80, 77, 75, 74, 73, 72, 71, 71, 71, 71, 72, 73, 75, 76, 79, 81, 85, 88, 93, 98, 105, 114, 126, 142, 131, 119, 108, 101, 95, 91, 87, 84, 81, 79, 77, 75, 74, 73, 72, 72, 72, 72, 73, 74, 76, 78, 80, 83, 86, 90, 94, 100, 107, 117, 130, 148, 136, 122, 112, 103, 97, 93, 89, 85, 83, 80, 78, 76, 75, 74, 74, 73, 73, 74, 75, 76, 77, 79, 81, 84, 88, 92, 96, 102, 110, 121, 136, 155, 144, 128, 
114, 106, 100, 94, 91, 87, 84, 82, 79, 78, 77, 76, 75, 75, 75, 75, 76, 77, 79, 81, 83, 86, 89, 94, 99, 105, 114, 124, 144, 169, 152, 132, 117, 108, 101, 96, 92, 89, 86, 83, 81, 79, 78, 77, 76, 76, 76, 77, 78, 79, 80, 82, 85, 88, 91, 96, 101, 107, 116, 129, 150, 184};

// CALIBRATION_SHADING_LS_TL84_G
static uint8_t _calibration_shading_ls_tl84_g[] = {134, 119, 109, 101, 96, 92, 88, 85, 82, 80, 78, 76, 75, 74, 73, 73, 73, 74, 74, 75, 76, 78, 80, 82, 85, 88, 92, 97, 103, 112, 127, 148, 129, 116, 106, 100, 94, 90, 86, 83, 81, 78, 76, 75, 74, 73, 72, 72, 72, 72, 73, 74, 75, 76, 78, 81, 83, 86, 90, 95, 101, 110, 123, 141, 124, 113, 104, 98, 92, 88, 85, 82, 79, 77, 75, 74, 72, 72, 71, 71, 71, 71, 72, 73, 74, 75, 77, 79, 82, 85, 89, 93, 99, 107, 118, 134, 120, 110, 102, 96, 91, 87, 83, 80, 78, 76, 74, 72, 71, 71, 70, 70, 70, 70, 71, 71, 73, 74, 76, 78, 81, 84, 87, 91, 97, 104, 115, 128, 117, 108, 100, 94, 89, 86, 82, 79, 77, 75, 73, 71, 70, 69, 69, 69, 69, 69, 70, 70, 72, 73, 75, 77, 80, 82, 86, 90, 95, 102, 111, 124, 114, 105, 98, 93, 88, 84, 81, 78, 76, 74, 72, 70, 69, 69, 68, 68, 68, 68, 69, 70, 71, 72, 74, 76, 79, 81, 85, 89, 93, 100, 109, 120, 112, 104, 97, 92, 87, 83, 80, 77, 75, 73, 71, 70, 69, 68, 67, 67, 67, 67, 68, 69, 70, 71, 73, 75, 78, 80, 84, 87, 92, 98, 107, 117, 110, 102, 96, 90, 86, 82, 79, 76, 74, 72, 70, 69, 68, 67, 67, 66, 66, 67, 67, 68, 69, 70, 72, 74, 77, 80, 83, 86, 91, 97, 105, 115, 109, 101, 95, 90, 85, 81, 78, 75, 73, 71, 70, 68, 67, 66, 66, 66, 66, 66, 66, 67, 68, 70, 71, 74, 76, 79, 82, 85, 90, 95, 103, 113, 107, 100, 94, 89, 84, 81, 78, 75, 73, 71, 69, 68, 67, 66, 65, 65, 65, 65, 66, 67, 68, 69, 71, 73, 75, 78, 81, 85, 89, 95, 102, 111, 106, 99, 93, 88, 84, 80, 77, 74, 72, 70, 68, 67, 66, 65, 65, 65, 65, 65, 65, 66, 67, 69, 70, 72, 75, 78, 81, 84, 89, 94, 101, 110, 105, 98, 93, 88, 83, 80, 77, 74, 72, 70, 68, 67, 66, 65, 65, 64, 65, 65, 65, 66, 67, 68, 70, 72, 74, 77, 80, 84, 88, 93, 100, 109, 105, 98, 92, 87, 83, 79, 76, 73, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 65, 65, 66, 68, 70, 72, 74, 77, 80, 83, 88, 93, 100, 108, 104, 98, 92, 87, 83, 79, 76, 73, 71, 69, 67, 66, 65, 65, 64, 64, 64, 64, 65, 65, 66, 68, 69, 71, 74, 76, 79, 83, 87, 93, 100, 108, 104, 97, 92, 87, 83, 79, 76, 73, 71, 69, 67, 66, 65, 64, 64, 64, 64, 64, 65, 65, 66, 67, 69, 71, 73, 76, 79, 83, 87, 93, 99, 108, 104, 97, 91, 87, 82, 79, 76, 73, 71, 69, 67, 66, 65, 64, 64, 64, 64, 64, 65, 65, 66, 67, 69, 71, 73, 76, 79, 83, 87, 92, 99, 108, 104, 97, 92, 87, 83, 79, 76, 73, 71, 69, 67, 66, 65, 64, 64, 64, 64, 64, 65, 65, 66, 67, 69, 71, 73, 76, 79, 83, 87, 93, 100, 108, 104, 98, 92, 87, 83, 79, 76, 73, 71, 69, 67, 66, 65, 65, 64, 64, 64, 64, 65, 65, 66, 68, 69, 71, 74, 76, 80, 83, 87, 93, 100, 109, 105, 98, 92, 87, 83, 79, 76, 73, 71, 69, 68, 66, 65, 65, 64, 64, 64, 65, 65, 65, 66, 68, 69, 71, 74, 77, 80, 83, 88, 93, 100, 109, 105, 98, 92, 87, 83, 80, 76, 74, 71, 70, 68, 67, 66, 65, 65, 64, 64, 65, 65, 66, 67, 68, 70, 72, 74, 77, 80, 84, 88, 94, 101, 110, 106, 99, 93, 88, 84, 80, 77, 74, 72, 70, 68, 67, 66, 65, 65, 65, 65, 65, 65, 66, 67, 69, 70, 72, 75, 77, 81, 84, 89, 94, 102, 111, 107, 100, 94, 89, 84, 81, 77, 75, 72, 70, 69, 68, 67, 66, 65, 65, 65, 65, 66, 67, 68, 69, 71, 73, 75, 78, 81, 85, 89, 95, 103, 112, 108, 101, 94, 89, 85, 81, 78, 75, 73, 71, 70, 68, 67, 66, 66, 66, 66, 66, 66, 67, 68, 70, 71, 73, 76, 79, 82, 86, 90, 96, 104, 114, 110, 102, 95, 90, 86, 82, 79, 76, 74, 72, 70, 69, 68, 67, 67, 66, 66, 67, 67, 68, 69, 70, 72, 74, 76, 79, 83, 86, 91, 97, 106, 116, 112, 103, 97, 91, 87, 83, 80, 77, 75, 73, 71, 70, 69, 68, 67, 67, 67, 67, 68, 69, 70, 71, 73, 75, 77, 80, 83, 87, 92, 98, 107, 119, 114, 105, 98, 92, 88, 84, 81, 78, 75, 74, 72, 71, 69, 69, 68, 68, 68, 68, 69, 69, 70, 72, 74, 76, 78, 81, 84, 88, 93, 100, 110, 122, 117, 107, 99, 94, 89, 85, 82, 79, 76, 74, 73, 71, 70, 70, 69, 69, 69, 69, 70, 70, 71, 73, 75, 77, 79, 82, 86, 90, 95, 102, 112, 124, 120, 110, 101, 95, 90, 86, 83, 80, 78, 75, 74, 72, 71, 71, 70, 70, 70, 70, 71, 71, 72, 74, 76, 78, 80, 83, 87, 91, 97, 104, 115, 128, 123, 112, 104, 97, 92, 88, 84, 81, 79, 77, 75, 74, 72, 72, 71, 71, 71, 71, 72, 72, 73, 75, 77, 79, 82, 85, 88, 93, 99, 107, 118, 132, 127, 116, 107, 99, 93, 89, 85, 83, 80, 78, 76, 75, 74, 73, 72, 72, 72, 72, 73, 74, 75, 76, 78, 80, 83, 86, 90, 95, 101, 110, 122, 138, 133, 120, 109, 101, 95, 91, 87, 84, 81, 79, 77, 76, 75, 74, 73, 73, 73

, 73, 74, 75, 76, 77, 79, 82, 84, 88, 92, 97, 104, 113, 129, 149, 140, 124, 112, 104, 97, 93, 89, 85, 83, 81, 79, 77, 76, 75, 75, 74, 74, 75, 75, 76, 77, 79, 81, 83, 86, 89, 93, 99, 106, 116, 134, 160};

// CALIBRATION_SHADING_LS_TL84_B
static uint8_t _calibration_shading_ls_tl84_b[] = {120, 108, 99, 93, 88, 84, 81, 79, 76, 75, 73, 72, 71, 71, 71, 71, 71, 71, 72, 72, 73, 74, 76, 77, 79, 82, 85, 89, 95, 103, 115, 132, 117, 106, 98, 92, 87, 83, 80, 78, 76, 74, 73, 72, 71, 70, 70, 70, 70, 70, 71, 72, 72, 74, 75, 77, 79, 81, 84, 88, 93, 101, 112, 127, 112, 103, 96, 90, 86, 82, 79, 77, 75, 73, 72, 71, 70, 70, 69, 69, 69, 70, 70, 71, 72, 73, 74, 76, 78, 80, 83, 87, 91, 98, 108, 122, 109, 101, 94, 89, 85, 81, 78, 76, 74, 73, 71, 70, 70, 69, 69, 69, 69, 69, 70, 70, 71, 72, 74, 75, 77, 80, 82, 86, 90, 96, 105, 117, 106, 99, 92, 87, 83, 80, 77, 75, 74, 72, 71, 70, 69, 68, 68, 68, 68, 68, 69, 70, 70, 71, 73, 75, 77, 79, 81, 85, 88, 94, 102, 113, 104, 97, 91, 86, 82, 79, 77, 74, 73, 71, 70, 69, 68, 68, 67, 67, 67, 68, 68, 69, 70, 71, 72, 74, 76, 78, 81, 83, 87, 92, 100, 110, 102, 95, 90, 85, 81, 78, 76, 74, 72, 71, 69, 68, 68, 67, 67, 67, 67, 67, 67, 68, 69, 70, 72, 74, 75, 77, 80, 82, 86, 91, 98, 107, 100, 94, 89, 84, 80, 78, 75, 73, 71, 70, 69, 68, 67, 67, 66, 66, 66, 66, 67, 67, 68, 70, 71, 73, 75, 77, 79, 82, 85, 90, 96, 105, 99, 93, 88, 83, 80, 77, 74, 73, 71, 69, 68, 67, 66, 66, 66, 65, 66, 66, 66, 67, 68, 69, 70, 72, 74, 76, 78, 81, 84, 89, 95, 103, 98, 92, 87, 83, 79, 76, 74, 72, 70, 69, 68, 67, 66, 65, 65, 65, 65, 65, 66, 66, 67, 68, 70, 71, 73, 76, 78, 81, 84, 88, 94, 101, 97, 91, 86, 82, 79, 76, 73, 72, 70, 68, 67, 66, 65, 65, 65, 65, 65, 65, 65, 66, 67, 68, 69, 71, 73, 75, 77, 80, 83, 88, 93, 100, 96, 90, 86, 82, 78, 75, 73, 71, 69, 68, 67, 66, 65, 65, 65, 64, 64, 65, 65, 65, 66, 67, 69, 70, 73, 75, 77, 80, 83, 87, 93, 99, 95, 90, 86, 81, 78, 75, 73, 71, 69, 68, 66, 66, 65, 64, 64, 64, 64, 64, 65, 65, 66, 67, 68, 70, 72, 74, 77, 80, 83, 87, 92, 98, 95, 90, 85, 81, 78, 75, 72, 71, 69, 67, 66, 65, 65, 64, 64, 64, 64, 64, 64, 65, 66, 67, 68, 70, 72, 74, 77, 79, 83, 87, 92, 98, 94, 89, 85, 81, 78, 75, 72, 70, 69, 67, 66, 65, 65, 64, 64, 64, 64, 64, 65, 65, 66, 67, 68, 70, 72, 74, 76, 79, 82, 87, 92, 98, 94, 89, 85, 81, 78, 75, 72, 70, 69, 67, 66, 65, 65, 64, 64, 64, 64, 64, 64, 65, 66, 67, 68, 70, 72, 74, 76, 79, 83, 86, 92, 98, 95, 89, 85, 81, 78, 75, 72, 70, 69, 67, 66, 65, 65, 64, 64, 64, 64, 64, 64, 65, 66, 67, 68, 70, 72, 74, 76, 79, 82, 87, 92, 98, 95, 89, 85, 81, 78, 75, 73, 71, 69, 67, 66, 65, 65, 64, 64, 64, 64, 64, 64, 65, 66, 67, 68, 70, 72, 74, 77, 79, 83, 87, 92, 98, 95, 90, 85, 81, 78, 75, 73, 71, 69, 68, 66, 66, 65, 64, 64, 64, 64, 64, 64, 65, 66, 67, 68, 70, 72, 74, 77, 80, 83, 87, 93, 99, 96, 90, 86, 82, 78, 75, 73, 71, 69, 68, 67, 66, 65, 64, 64, 64, 64, 64, 65, 65, 66, 67, 68, 70, 72, 74, 77, 80, 83, 87, 93, 100, 96, 91, 86, 82, 79, 76, 73, 71, 70, 68, 67, 66, 65, 65, 65, 64, 64, 65, 65, 66, 66, 67, 69, 71, 73, 75, 77, 80, 84, 88, 94, 101, 97, 92, 87, 83, 79, 76, 74, 72, 70, 69, 68, 67, 66, 65, 65, 65, 65, 65, 65, 66, 67, 68, 69, 71, 73, 75, 78, 81, 84, 88, 94, 102, 98, 92, 87, 83, 80, 77, 74, 72, 71, 69, 68, 67, 66, 66, 65, 65, 65, 66, 66, 66, 67, 68, 70, 72, 74, 76, 78, 81, 85, 89, 96, 103, 100, 94, 88, 84, 80, 77, 75, 73, 71, 70, 69, 68, 67, 66, 66, 66, 66, 66, 67, 67, 68, 69, 71, 72, 74, 76, 79, 82, 85, 90, 97, 105, 101, 95, 89, 85, 81, 78, 76, 74, 72, 71, 70, 69, 68, 67, 67, 67, 67, 67, 67, 68, 69, 70, 71, 73, 75, 77, 79, 82, 86, 91, 99, 107, 104, 96, 90, 86, 82, 79, 77, 75, 73, 72, 70, 69, 68, 68, 67, 67, 67, 68, 68, 68, 69, 70, 72, 74, 76, 78, 80, 83, 87, 93, 100, 110, 106, 98, 92, 87, 83, 80, 77, 75, 74, 72, 71, 70, 69, 69, 68, 68, 68, 68, 69, 69, 70, 71, 73, 74, 76, 79, 81, 84, 89, 94, 102, 112, 109, 100, 93, 88, 84, 81, 78, 76, 74, 73, 72, 71, 70, 69, 69, 69, 69, 69, 69, 70, 71, 72, 73, 75, 77, 79, 82, 85, 90, 96, 105, 116, 112, 103, 95, 89, 85, 82, 79, 77, 75, 74, 72, 71, 71, 70, 70, 69, 69, 70, 70, 71, 71, 73, 74, 76, 78, 80, 83, 86, 92, 99, 108, 120, 115, 105, 97, 91, 86, 83, 80, 78, 76, 74, 73, 72, 71, 71, 70, 70, 70, 70, 71, 71, 72, 73, 75, 76, 79, 81, 84, 88, 93, 101, 111, 124, 119, 108, 99, 92, 87, 84, 81, 78, 76, 75, 74, 73, 72, 71, 71, 71, 71, 71, 71, 72, 73, 74, 75, 77, 79, 82, 85, 89, 95, 103, 116, 131, 123, 111, 

101, 94, 88, 85, 81, 79, 77, 75, 74, 73, 72, 72, 71, 71, 71, 71, 72, 72, 73, 74, 76, 78, 80, 83, 86, 91, 97, 105, 119, 139};

// CALIBRATION_SHADING_LS_D65_R
static uint8_t _calibration_shading_ls_d65_r[] = {156, 137, 123, 114, 107, 101, 97, 92, 88, 85, 83, 80, 78, 77, 76, 76, 76, 76, 77, 78, 80, 82, 85, 88, 92, 96, 102, 108, 116, 127, 145, 172, 149, 133, 120, 111, 105, 99, 94, 90, 87, 83, 81, 78, 77, 76, 75, 74, 74, 75, 75, 76, 78, 80, 83, 86, 90, 94, 99, 105, 113, 123, 140, 163, 142, 128, 117, 109, 102, 97, 93, 88, 85, 81, 79, 77, 75, 74, 73, 72, 72, 73, 74, 75, 76, 78, 81, 84, 88, 92, 97, 103, 110, 120, 134, 154, 138, 125, 114, 106, 101, 95, 91, 87, 83, 80, 77, 75, 74, 72, 71, 71, 71, 71, 72, 73, 75, 77, 79, 83, 86, 90, 95, 101, 108, 117, 130, 148, 134, 122, 112, 105, 99, 94, 89, 85, 82, 79, 76, 74, 72, 71, 70, 70, 70, 70, 71, 72, 73, 75, 78, 81, 85, 89, 94, 99, 105, 114, 126, 142, 130, 119, 110, 103, 97, 92, 88, 84, 80, 77, 75, 73, 71, 70, 69, 69, 69, 69, 70, 71, 72, 74, 77, 80, 83, 87, 92, 97, 104, 112, 124, 139, 128, 117, 109, 102, 96, 91, 87, 83, 79, 76, 74, 72, 70, 69, 68, 67, 67, 68, 68, 70, 71, 73, 76, 79, 82, 86, 91, 96, 102, 110, 121, 135, 126, 115, 107, 100, 95, 90, 85, 81, 78, 75, 73, 71, 69, 68, 67, 67, 67, 67, 68, 69, 70, 72, 75, 78, 81, 85, 90, 95, 101, 109, 119, 132, 124, 114, 106, 99, 94, 89, 85, 81, 77, 74, 72, 70, 68, 67, 66, 66, 66, 66, 67, 68, 69, 71, 74, 77, 80, 84, 89, 94, 100, 108, 117, 130, 122, 113, 105, 99, 93, 88, 84, 80, 76, 73, 71, 69, 68, 66, 66, 65, 65, 65, 66, 67, 69, 71, 73, 76, 80, 83, 88, 93, 99, 106, 116, 129, 121, 112, 104, 98, 92, 87, 83, 79, 76, 73, 70, 68, 67, 66, 65, 65, 65, 65, 65, 67, 68, 70, 72, 75, 79, 83, 87, 93, 98, 106, 116, 127, 121, 111, 103, 97, 92, 87, 82, 79, 75, 72, 70, 68, 66, 65, 65, 64, 64, 65, 65, 66, 68, 69, 72, 75, 78, 82, 87, 92, 98, 105, 115, 127, 120, 111, 103, 97, 92, 87, 82, 78, 75, 72, 69, 67, 66, 65, 64, 64, 64, 64, 65, 66, 67, 69, 72, 74, 78, 82, 87, 92, 98, 105, 114, 126, 120, 110, 103, 97, 91, 86, 82, 78, 74, 72, 69, 67, 66, 65, 64, 64, 64, 64, 65, 66, 67, 69, 71, 74, 78, 82, 86, 92, 98, 105, 114, 125, 119, 110, 103, 96, 91, 86, 82, 78, 74, 72, 69, 67, 66, 65, 64, 64, 64, 64, 65, 66, 67, 69, 71, 74, 78, 82, 86, 91, 98, 105, 114, 125, 120, 110, 103, 97, 91, 86, 82, 78, 74, 71, 69, 67, 66, 65, 64, 64, 64, 64, 65, 66, 67, 69, 71, 74, 78, 82, 86, 91, 98, 105, 114, 125, 120, 111, 103, 97, 91, 86, 82, 78, 75, 72, 69, 67, 66, 65, 64, 64, 64, 65, 65, 66, 67, 69, 71, 74, 78, 82, 87, 92, 98, 105, 114, 126, 121, 111, 103, 97, 92, 87, 82, 78, 75, 72, 70, 68, 66, 65, 65, 64, 65, 65, 65, 66, 68, 69, 72, 75, 78, 82, 87, 92, 98, 105, 115, 127, 121, 112, 104, 98, 92, 87, 83, 79, 75, 72, 70, 68, 67, 66, 65, 65, 65, 65, 66, 67, 68, 70, 72, 75, 79, 83, 87, 93, 99, 106, 116, 128, 122, 112, 105, 98, 93, 88, 83, 79, 76, 73, 71, 69, 67, 66, 65, 65, 65, 65, 66, 67, 69, 70, 73, 76, 79, 83, 88, 93, 99, 107, 117, 129, 123, 113, 105, 99, 93, 88, 84, 80, 77, 74, 71, 69, 68, 67, 66, 66, 66, 66, 67, 68, 69, 71, 74, 76, 80, 84, 89, 94, 100, 108, 118, 131, 124, 114, 107, 100, 94, 89, 85, 81, 77, 75, 72, 70, 69, 68, 67, 66, 66, 67, 68, 69, 70, 72, 74, 77, 81, 85, 90, 95, 102, 109, 120, 133, 126, 116, 108, 101, 95, 90, 86, 82, 78, 75, 73, 71, 70, 68, 68, 67, 67, 68, 68, 70, 71, 73, 75, 78, 82, 86, 91, 96, 103, 111, 121, 135, 128, 118, 109, 102, 96, 91, 87, 83, 80, 77, 74, 72, 71, 69, 69, 68, 68, 69, 70, 71, 72, 74, 76, 80, 83, 87, 92, 97, 104, 112, 124, 138, 131, 120, 110, 103, 98, 93, 88, 84, 81, 78, 75, 73, 72, 71, 70, 69, 69, 70, 71, 72, 73, 75, 78, 81, 84, 88, 93, 99, 106, 114, 126, 142, 134, 122, 112, 105, 99, 94, 89, 85, 82, 79, 77, 75, 73, 72, 71, 71, 71, 71, 72, 73, 74, 76, 79, 82, 86, 90, 95, 100, 107, 117, 129, 145, 138, 125, 114, 107, 100, 95, 91, 87, 83, 80, 78, 76, 74, 73, 72, 72, 72, 72, 73, 74, 76, 78, 80, 83, 87, 91, 96, 102, 109, 119, 132, 149, 142, 128, 117, 109, 102, 97, 92, 88, 85, 82, 79, 77, 76, 74, 74, 73, 73, 74, 74, 75, 77, 79, 82, 85, 89, 93, 98, 104, 112, 122, 135, 153, 148, 132, 120, 111, 104, 99, 94, 90, 86, 83, 81, 79, 77, 76, 75, 75, 75, 75, 76, 77, 79, 81, 83, 87, 90, 95, 100, 106, 115, 126, 140, 159, 154, 137, 124, 114, 106, 101, 96, 92, 88, 85, 83, 80, 79, 78, 77, 76, 76, 77, 78, 79, 80, 82, 85, 88, 92

, 97, 102, 109, 118, 129, 146, 168, 163, 143, 127, 117, 109, 103, 98, 94, 90, 87, 84, 82, 81, 79, 79, 78, 78, 79, 79, 81, 82, 84, 87, 91, 95, 99, 105, 112, 122, 134, 155, 183, 173, 148, 131, 120, 112, 106, 101, 96, 92, 89, 86, 84, 83, 81, 80, 80, 80, 80, 81, 82, 84, 86, 89, 93, 97, 101, 107, 115, 125, 139, 163, 200};

// CALIBRATION_SHADING_LS_D65_G
static uint8_t _calibration_shading_ls_d65_g[] = {133, 118, 108, 100, 95, 90, 87, 83, 81, 78, 76, 75, 74, 73, 72, 72, 72, 72, 72, 73, 74, 76, 77, 79, 82, 85, 88, 93, 99, 107, 120, 138, 128, 116, 105, 99, 93, 89, 85, 82, 79, 77, 75, 74, 72, 72, 71, 71, 71, 71, 71, 72, 73, 74, 76, 78, 81, 84, 87, 91, 97, 105, 117, 132, 123, 112, 103, 97, 92, 87, 84, 81, 78, 76, 74, 73, 71, 71, 70, 70, 70, 70, 70, 71, 72, 73, 75, 77, 79, 82, 86, 90, 95, 102, 113, 127, 120, 109, 101, 95, 90, 86, 82, 80, 77, 75, 73, 72, 70, 70, 69, 69, 69, 69, 69, 70, 71, 72, 74, 76, 78, 81, 84, 88, 93, 100, 110, 122, 116, 107, 99, 93, 89, 85, 81, 78, 76, 74, 72, 71, 69, 69, 68, 68, 68, 68, 68, 69, 70, 71, 73, 75, 77, 80, 83, 87, 91, 98, 107, 118, 114, 105, 98, 92, 88, 84, 80, 77, 75, 73, 71, 70, 69, 68, 67, 67, 67, 67, 68, 68, 69, 71, 72, 74, 77, 79, 82, 86, 90, 96, 104, 115, 112, 103, 97, 91, 87, 83, 79, 77, 74, 72, 70, 69, 68, 67, 67, 66, 66, 66, 67, 68, 69, 70, 71, 73, 76, 78, 81, 85, 89, 95, 102, 112, 110, 102, 95, 90, 86, 82, 79, 76, 74, 71, 70, 68, 67, 67, 66, 66, 66, 66, 66, 67, 68, 69, 71, 73, 75, 78, 80, 84, 88, 93, 101, 110, 109, 101, 95, 89, 85, 81, 78, 75, 73, 71, 69, 68, 67, 66, 65, 65, 65, 65, 66, 66, 67, 69, 70, 72, 74, 77, 80, 83, 87, 92, 100, 108, 108, 100, 94, 89, 84, 81, 77, 75, 72, 70, 69, 67, 66, 66, 65, 65, 65, 65, 65, 66, 67, 68, 70, 72, 74, 76, 79, 83, 87, 92, 99, 107, 107, 99, 93, 88, 84, 80, 77, 74, 72, 70, 68, 67, 66, 65, 65, 64, 64, 64, 65, 66, 66, 68, 69, 71, 73, 76, 79, 82, 86, 91, 98, 106, 106, 99, 93, 88, 83, 80, 77, 74, 72, 70, 68, 67, 66, 65, 64, 64, 64, 64, 65, 65, 66, 67, 69, 71, 73, 76, 78, 82, 86, 91, 97, 105, 105, 98, 92, 87, 83, 79, 76, 74, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 71, 73, 75, 78, 82, 85, 90, 97, 105, 105, 98, 92, 87, 83, 79, 76, 73, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 70, 73, 75, 78, 81, 85, 90, 97, 104, 105, 98, 92, 87, 83, 79, 76, 73, 71, 69, 67, 66, 65, 65, 64, 64, 64, 64, 64, 65, 66, 67, 68, 70, 73, 75, 78, 81, 85, 90, 97, 104, 105, 98, 92, 87, 83, 79, 76, 73, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 70, 73, 75, 78, 81, 85, 90, 97, 105, 105, 98, 92, 87, 83, 79, 76, 73, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 70, 73, 75, 78, 82, 86, 90, 97, 105, 106, 98, 92, 87, 83, 79, 76, 74, 71, 69, 68, 66, 65, 65, 65, 64, 64, 64, 65, 65, 66, 67, 69, 71, 73, 75, 78, 82, 86, 91, 97, 105, 106, 99, 93, 88, 83, 80, 77, 74, 72, 70, 68, 67, 66, 65, 65, 65, 65, 65, 65, 65, 66, 68, 69, 71, 73, 76, 79, 82, 86, 91, 98, 106, 107, 99, 93, 88, 84, 80, 77, 74, 72, 70, 69, 67, 66, 65, 65, 65, 65, 65, 65, 66, 67, 68, 69, 71, 74, 76, 79, 83, 87, 92, 99, 107, 107, 100, 94, 89, 84, 81, 78, 75, 73, 71, 69, 68, 67, 66, 65, 65, 65, 65, 66, 66, 67, 68, 70, 72, 74, 77, 80, 83, 87, 92, 99, 108, 109, 101, 95, 89, 85, 81, 78, 75, 73, 71, 70, 68, 67, 66, 66, 66, 65, 66, 66, 67, 68, 69, 71, 72, 75, 77, 80, 84, 88, 93, 101, 110, 110, 102, 96, 90, 86, 82, 79, 76, 74, 72, 70, 69, 68, 67, 66, 66, 66, 66, 67, 67, 68, 70, 71, 73, 75, 78, 81, 85, 89, 94, 102, 112, 112, 104, 97, 91, 87, 83, 80, 77, 75, 73, 71, 70, 69, 68, 67, 67, 67, 67, 67, 68, 69, 70, 72, 74, 76, 79, 82, 85, 90, 96, 104, 114, 114, 105, 98, 92, 88, 84, 81, 78, 75, 73, 72, 71, 69, 69, 68, 68, 68, 68, 68, 69, 70, 71, 73, 75, 77, 80, 83, 87, 91, 97, 106, 116, 117, 107, 100, 94, 89, 85, 82, 79, 76, 74, 73, 71, 70, 69, 69, 68, 68, 69, 69, 70, 71, 72, 74, 76, 78, 81, 84, 88, 92, 99, 108, 119, 120, 110, 101, 95, 90, 86, 83, 80, 77, 75, 74, 72, 71, 70, 70, 69, 69, 70, 70, 71, 72, 73, 75, 77, 79, 82, 85, 89, 94, 101, 110, 122, 123, 112, 103, 97, 92, 88, 84, 81, 79, 76, 75, 73, 72, 71, 71, 70, 70, 71, 71, 72, 73, 74, 76, 78, 80, 83, 86, 90, 96, 103, 113, 126, 127, 115, 106, 99, 93, 89, 85, 82, 80, 78, 76, 75, 73, 73, 72, 72, 71, 72, 72, 73, 74, 75, 77, 79, 81, 84, 88, 92, 98, 106, 116, 130, 131, 119, 109, 101, 95, 91, 87, 84, 81, 79, 77, 76, 75, 74, 73, 73, 73, 73, 73, 74, 75, 76, 78, 80, 83, 86, 90, 94, 101, 109, 121, 136, 138, 124, 112, 103, 97, 93, 89, 85, 83, 80, 79, 77, 76, 75, 74, 74, 74, 74, 75, 75, 

76, 78, 80, 82, 84, 88, 91, 97, 103, 112, 128, 147, 146, 128, 114, 106, 99, 94, 90, 87, 84, 82, 80, 78, 77, 76, 76, 75, 75, 75, 76, 77, 78, 79, 81, 83, 86, 89, 93, 99, 106, 116, 133, 158};

// CALIBRATION_SHADING_LS_D65_B
static uint8_t _calibration_shading_ls_d65_b[] = {122, 110, 100, 94, 88, 84, 81, 78, 76, 74, 73, 72, 71, 70, 70, 70, 70, 70, 71, 71, 72, 73, 74, 76, 78, 80, 83, 87, 92, 99, 110, 125, 118, 107, 99, 92, 87, 83, 80, 78, 75, 74, 72, 71, 70, 70, 69, 69, 69, 70, 70, 70, 71, 72, 74, 75, 77, 79, 82, 86, 90, 97, 107, 120, 114, 104, 97, 91, 86, 82, 79, 77, 75, 73, 72, 71, 70, 69, 69, 69, 69, 69, 69, 70, 70, 71, 73, 74, 76, 78, 81, 84, 89, 95, 104, 116, 111, 102, 95, 89, 85, 81, 78, 76, 74, 72, 71, 70, 69, 69, 68, 68, 68, 68, 69, 69, 70, 71, 72, 74, 76, 78, 80, 83, 87, 93, 102, 112, 108, 100, 93, 88, 83, 80, 77, 75, 73, 72, 70, 69, 68, 68, 67, 67, 67, 67, 68, 68, 69, 70, 72, 73, 75, 77, 79, 82, 86, 91, 99, 109, 106, 98, 92, 87, 83, 79, 77, 74, 73, 71, 70, 69, 68, 67, 67, 67, 67, 67, 67, 68, 69, 70, 71, 73, 74, 76, 79, 81, 85, 90, 97, 106, 104, 97, 91, 86, 82, 78, 76, 74, 72, 70, 69, 68, 67, 67, 66, 66, 66, 66, 67, 67, 68, 69, 70, 72, 74, 76, 78, 80, 84, 88, 95, 103, 102, 95, 89, 85, 81, 78, 75, 73, 71, 70, 69, 68, 67, 66, 66, 65, 65, 66, 66, 67, 67, 68, 70, 71, 73, 75, 77, 80, 83, 87, 94, 101, 101, 94, 89, 84, 80, 77, 75, 72, 71, 69, 68, 67, 66, 66, 65, 65, 65, 65, 66, 66, 67, 68, 69, 71, 73, 75, 77, 79, 83, 87, 93, 100, 100, 93, 88, 83, 80, 76, 74, 72, 70, 69, 68, 67, 66, 65, 65, 65, 65, 65, 65, 66, 66, 67, 69, 70, 72, 74, 76, 79, 82, 86, 92, 98, 99, 93, 87, 83, 79, 76, 74, 72, 70, 68, 67, 66, 65, 65, 65, 64, 64, 64, 65, 65, 66, 67, 68, 70, 72, 74, 76, 78, 82, 86, 91, 98, 98, 92, 87, 82, 79, 76, 73, 71, 70, 68, 67, 66, 65, 65, 64, 64, 64, 64, 64, 65, 66, 67, 68, 69, 71, 74, 76, 78, 81, 85, 91, 97, 98, 92, 86, 82, 78, 76, 73, 71, 69, 68, 67, 66, 65, 64, 64, 64, 64, 64, 64, 65, 65, 66, 68, 69, 71, 73, 75, 78, 81, 85, 90, 96, 97, 91, 86, 82, 78, 75, 73, 71, 69, 68, 67, 66, 65, 64, 64, 64, 64, 64, 64, 65, 65, 66, 68, 69, 71, 73, 75, 78, 81, 85, 90, 96, 97, 91, 86, 82, 78, 75, 73, 71, 69, 68, 67, 66, 65, 64, 64, 64, 64, 64, 64, 64, 65, 66, 67, 69, 71, 73, 75, 78, 81, 85, 90, 96, 97, 91, 86, 82, 78, 75, 73, 71, 69, 68, 67, 66, 65, 64, 64, 64, 64, 64, 64, 65, 65, 66, 67, 69, 71, 73, 75, 78, 81, 85, 90, 96, 97, 91, 86, 82, 78, 76, 73, 71, 69, 68, 67, 66, 65, 64, 64, 64, 64, 64, 64, 65, 65, 66, 68, 69, 71, 73, 75, 78, 81, 85, 90, 97, 97, 91, 86, 82, 79, 76, 73, 71, 69, 68, 67, 66, 65, 65, 64, 64, 64, 64, 64, 65, 65, 66, 68, 69, 71, 73, 76, 78, 82, 85, 91, 97, 98, 92, 87, 82, 79, 76, 74, 71, 70, 68, 67, 66, 65, 65, 64, 64, 64, 64, 65, 65, 66, 67, 68, 70, 71, 74, 76, 79, 82, 86, 91, 98, 99, 92, 87, 83, 79, 76, 74, 72, 70, 69, 67, 66, 65, 65, 65, 65, 65, 65, 65, 65, 66, 67, 68, 70, 72, 74, 76, 79, 82, 86, 92, 98, 99, 93, 88, 83, 80, 77, 74, 72, 70, 69, 68, 67, 66, 65, 65, 65, 65, 65, 65, 66, 66, 67, 69, 70, 72, 74, 77, 79, 83, 87, 92, 99, 100, 94, 89, 84, 80, 77, 75, 73, 71, 69, 68, 67, 66, 66, 65, 65, 65, 65, 65, 66, 67, 68, 69, 71, 73, 75, 77, 80, 83, 88, 93, 101, 101, 95, 89, 85, 81, 78, 75, 73, 72, 70, 69, 68, 67, 66, 66, 66, 66, 66, 66, 67, 67, 68, 70, 71, 73, 75, 78, 80, 84, 88, 95, 102, 103, 96, 90, 86, 82, 79, 76, 74, 72, 71, 70, 68, 68, 67, 66, 66, 66, 66, 67, 67, 68, 69, 70, 72, 74, 76, 78, 81, 85, 89, 96, 104, 105, 98, 92, 87, 83, 79, 77, 75, 73, 72, 70, 69, 68, 68, 67, 67, 67, 67, 67, 68, 69, 70, 71, 73, 75, 77, 79, 82, 86, 91, 98, 107, 107, 100, 93, 88, 84, 80, 78, 76, 74, 72, 71, 70, 69, 68, 68, 68, 68, 68, 68, 69, 69, 70, 72, 73, 75, 78, 80, 83, 87, 92, 100, 109, 110, 102, 94, 89, 85, 81, 79, 77, 75, 73, 72, 71, 70, 69, 69, 68, 68, 68, 69, 69, 70, 71, 73, 74, 76, 78, 81, 84, 88, 94, 102, 112, 113, 104, 96, 90, 86, 82, 80, 77, 76, 74, 73, 72, 71, 70, 70, 69, 69, 69, 70, 70, 71, 72, 73, 75, 77, 79, 82, 85, 90, 96, 105, 116, 117, 107, 98, 92, 87, 83, 81, 78, 76, 75, 73, 72, 71, 71, 70, 70, 70, 70, 70, 71, 72, 73, 74, 76, 78, 80, 83, 87, 91, 98, 108, 119, 120, 109, 101, 94, 89, 85, 82, 79, 77, 76, 74, 73, 72, 72, 71, 71, 71, 71, 71, 72, 73, 74, 75, 77, 79, 81, 84, 88, 93, 101, 111, 124, 125, 113, 103, 96, 90, 86, 83, 80, 78, 77, 75, 74, 73, 72, 72, 72, 72, 72, 72, 73, 73, 75, 76, 78, 80, 82, 85, 90, 96, 104, 116, 131, 131, 117,

 105, 97, 91, 87, 84, 81, 79, 77, 76, 75, 74, 73, 73, 72, 72, 73, 73, 73, 74, 75, 77, 79, 81, 83, 87, 91, 97, 106, 120, 138};


// R G B
static uint16_t _calibration_awb_warming_ls_a[] = {256, 256, 256};

// R G B
static uint16_t _calibration_awb_warming_ls_d75[] = {256, 256, 256};

// R G B
static uint16_t _calibration_awb_warming_ls_d50[] = {256, 256, 256};

// CALIBRATION_NOISE_PROFILE
static uint8_t _calibration_noise_profile[] = {0, 0, 0, 0, 0, 0, 0, 0, 5, 18, 23, 27, 30, 33, 34, 36, 37, 39, 40, 41, 42, 43, 43, 44, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55, 55, 55, 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68};

// CALIBRATION_DEMOSAIC
static uint8_t _calibration_demosaic[] = {7, 23, 29, 33, 36, 38, 40, 42, 43, 44, 46, 47, 48, 49, 50, 50, 51, 52, 52, 53, 53, 54, 55, 55, 55, 56, 56, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74};

// 8-bit normalised noise profile for WDR stitching
static uint8_t _calibration_wdr_np_lut[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

// CALIBRATION_GAMMA
static uint16_t _calibration_gamma[] = {0, 198, 333, 441, 538, 631, 721, 808, 892, 972, 1050, 1125, 1197, 1267, 1334, 1398, 1461, 1522, 1580, 1636, 1691, 1743, 1794, 1844, 1891, 1937, 1982, 2024, 2065, 2105, 2143, 2181, 2218, 2254, 2290, 2325, 2360, 2394, 2428, 2460, 2493, 2525, 2558, 2588, 2620, 2650, 2680, 2710, 2739, 2767, 2795, 2823, 2850, 2877, 2903, 2931, 2955, 2981, 3006, 3031, 3055, 3079, 3101, 3124, 3147, 3170, 3191, 3212, 3233, 3255, 3275, 3295, 3314, 3334, 3352, 3371, 3390, 3408, 3425, 3442, 3460, 3477, 3494, 3511, 3527, 3544, 3560, 3575, 3592, 3607, 3623, 3638, 3653, 3667, 3682, 3697, 3711, 3725, 3739, 3753, 3767, 3780, 3793, 3806, 3820, 3833, 3846, 3859, 3871, 3884, 3896, 3907, 3920, 3932, 3943, 3955, 3967, 3978, 3989, 4000, 4011, 4022, 4033, 4043, 4054, 4065, 4075, 4085, 4095};

// CALIBRATION_IRIDIX_ASYMMETRY
static uint32_t _calibration_iridix_asymmetry[] = {
    0, 61184, 116961, 168002, 214899, 258115, 298084, 335172, 369653, 401797, 431862, 460022, 486454, 511335, 534791, 556919, 577880, 597720, 616568, 634473, 651529, 667785, 683305, 698153, 712346, 725978, 739050, 751610, 763706, 775355, 786587, 797451, 807931, 818091, 827947, 837499, 846780, 855820, 864604, 873180, 881532, 889708, 897708, 905532, 913213, 920733, 928141, 935421, 942589, 949645, 956621, 963501, 970317, 977053, 983742, 990366, 996942, 1003470, 1009982, 1016446, 1022894, 1029326, 1035742, 1042158, 1048575,
};

// CALIBRATION_CA_FILTER_MEM
static uint32_t _calibration_ca_filter_mem[] = {32768, 229629, 491259, 4278943225, 4279204855, 4262689525, 4246239220, 4229788915, 4213338610, 4196888050, 4197214450, 4180763890, 4164313330, 4147928050, 4131477235, 4115091955, 4098641140, 4082190325, 4082516470, 4066065655, 4066391800, 4066652665, 4066913530, 4067239930, 4067500795, 4084473340, 4101445885, 4118418430, 4152037375, 4185721855, 4219340544, 4253025024};

// calibration_awb_scene_presets in the following order AWB_DAY_LIGHT AWB_CLOUDY AWB_INCANDESCENT AWB_FLOURESCENT AWB_TWILIGHT AWB_SHADE AWB_WARM_FLOURESCENT
static uint16_t _calibration_awb_scene_presets[7][2] = {
    {256, 256},
    {297, 207},
    {161, 443},
    {204, 328},
    {204, 328},
    {301, 187},
    {171, 417}};

// CALIBRATION_CA_CORRECTION: MIN_CORRECTION, MESH_WIDTH, MESH_HEIGHT
static uint16_t _calibration_ca_correction[] = {1, 64, 64};


// CALIBRATION_CA_CORRECTION_MEM
static uint16_t _calibration_ca_correction_mem[][10] = {
    {204, 65526, 81, 3, 65254, 65461, 65491, 141, 42, 65437},
    {65533, 109, 65531, 33, 65487, 65443, 65485, 44, 41, 65490},
    {65260, 65534, 65415, 65531, 384, 128, 68, 65523, 65470, 65321},
    {10, 65381, 65516, 65478, 61, 156, 97, 65472, 26, 65417}};

static uint32_t _calibration_lut3d_mem[] = {0};

static uint32_t _calibration_decompander0_mem[] = {0, 32768, 65536, 98304, 131072, 163840, 196608, 229376, 262144, 294912, 327680, 360448, 393216, 425984, 458752, 491520, 524288, 557055, 589823, 622591, 655359, 688127, 720895, 753663, 786431, 819199, 851967, 884735, 917503, 950271, 983039, 1015807, 1048575};
static uint32_t _calibration_decompander1_mem[] = {0, 4096, 8192, 12288, 16384, 20480, 24576, 28672, 32768, 36864, 40960, 45056, 49152, 53248, 57344, 61440, 65536, 69632, 73728, 77824, 81920, 86016, 90112, 94208, 98304, 102400, 106496, 110592, 114688, 118784, 122880, 126976, 131072, 135168, 139264, 143360, 147456, 151552, 155648, 159744, 163840, 167936, 172032, 176128, 180224, 184320, 188416, 192512, 196608, 200704, 204800, 208896, 212992, 217088, 221184, 225280, 229376, 233472, 237568, 241664, 245760, 249856, 253952, 258048, 262144, 266240, 270336, 274432, 278528, 282624, 286720, 290816, 294912, 299008, 303104, 307200, 311296, 315392, 319488, 323584, 327680, 331776, 335872, 339968, 344064, 348160, 352256, 356352, 360448, 364544, 368640, 372736, 376832, 380928, 385024, 389120, 393216, 397312, 401408, 405504, 409600, 413696, 417792, 421888, 425984, 430080, 434176, 438272, 442368, 446464, 450560, 454656, 458752, 462848, 466944, 471040, 475136, 479232, 483328, 487424, 491520, 495616, 499712, 503808, 507904, 512000, 516096, 520192, 524288, 528383, 532479, 536575, 540671, 544767, 548863, 552959, 557055, 561151, 565247, 569343, 573439, 577535, 581631, 585727, 589823, 593919, 598015, 602111, 606207, 610303, 614399, 618495, 622591, 626687, 630783, 634879, 638975, 643071, 647167, 651263, 655359, 659455, 663551, 667647, 671743, 675839, 679935, 684031, 688127, 692223, 696319, 700415, 704511, 708607, 712703, 716799, 720895, 724991, 729087, 733183, 737279, 741375, 745471, 749567, 753663, 757759, 761855, 765951, 770047, 774143, 778239, 782335, 786431, 790527, 794623, 798719, 802815, 806911, 811007, 815103, 819199, 823295, 827391, 831487, 835583, 839679, 843775, 847871, 851967, 856063, 860159, 864255, 868351, 872447, 876543, 880639, 884735, 888831, 892927, 897023, 901119, 905215, 909311, 913407, 917503, 921599, 925695, 929791, 933887, 937983, 942079, 946175, 950271, 954367, 958463, 962559, 966655, 970751, 974847, 978943, 983039, 987135, 991231, 995327, 999423, 1003519, 1007615, 1011711, 1015807, 1019903, 1023999, 1028095, 1032191, 1036287, 1040383, 1044479, 1048575};

// CALIBRATION_SHADING_RADIAL_R
static uint16_t _calibration_shading_radial_r[] = {4096, 4113, 4130, 4147, 4164, 4182, 4199, 4216, 4234, 4251, 4269, 4286, 4304, 4322, 4340, 4357, 4375, 4393, 4411, 4430, 4448, 4466, 4484, 4503, 4521, 4540, 4558, 4577, 4596, 4614, 4633, 4652, 4671, 4690, 4709, 4728, 4747, 4767, 4786, 4805, 4825, 4844, 4864, 4883, 4903, 4923, 4943, 4963, 4983, 5003, 5023, 5043, 5063, 5084, 5104, 5124, 5145, 5165, 5186, 5207, 5227, 5248, 5269, 5290, 5311, 5332, 5354, 5375, 5396, 5417, 5439, 5460, 5482, 5504, 5526, 5547, 5569, 5591, 5613, 5635, 5658, 5680, 5702, 5725, 5747, 5770, 5793, 5815, 5838, 5861, 5884, 5907, 5930, 5954, 5977, 6001, 6024, 6048, 6072, 6095, 6119, 6143, 6167, 6192, 6216, 6240, 6265, 6290, 6314, 6339, 6364, 6389, 6415, 6440, 6465, 6491, 6517, 6542, 6568, 6594, 6621, 6647, 6673, 6700, 6727, 6754, 6781, 6808, 6835};

// CALIBRATION_SHADING_RADIAL_G
static uint16_t _calibration_shading_radial_g[] = {4096, 4108, 4120, 4133, 4145, 4157, 4170, 4182, 4195, 4207, 4220, 4233, 4246, 4258, 4271, 4284, 4297, 4310, 4323, 4336, 4350, 4363, 4376, 4389, 4403, 4416, 4430, 4443, 4457, 4471, 4485, 4498, 4512, 4526, 4540, 4554, 4568, 4582, 4596, 4611, 4625, 4639, 4654, 4668, 4682, 4697, 4712, 4726, 4741, 4756, 4771, 4785, 4800, 4815, 4830, 4845, 4860, 4876, 4891, 4906, 4922, 4937, 4952, 4968, 4983, 4999, 5015, 5030, 5046, 5062, 5078, 5094, 5110, 5126, 5142, 5158, 5174, 5191, 5207, 5223, 5240, 5256, 5273, 5290, 5306, 5323, 5340, 5357, 5374, 5391, 5408, 5425, 5442, 5459, 5477, 5494, 5512, 5529, 5547, 5564, 5582, 5600, 5618, 5636, 5654, 5672, 5690, 5708, 5726, 5745, 5763, 5782, 5800, 5819, 5838, 5857, 5876, 5895, 5914, 5933, 5952, 5972, 5991, 6011, 6031, 6051, 6070, 6090, 6111};

// CALIBRATION_SHADING_RADIAL_B
static uint16_t _calibration_shading_radial_b[] = {4096, 4107, 4118, 4128, 4139, 4150, 4161, 4172, 4183, 4194, 4205, 4216, 4228, 4239, 4250, 4261, 4272, 4284, 4295, 4307, 4318, 4329, 4341, 4352, 4364, 4376, 4387, 4399, 4411, 4422, 4434, 4446, 4458, 4470, 4482, 4493, 4505, 4517, 4530, 4542, 4554, 4566, 4578, 4590, 4603, 4615, 4627, 4640, 4652, 4664, 4677, 4689, 4702, 4714, 4727, 4740, 4752, 4765, 4778, 4791, 4803, 4816, 4829, 4842, 4855, 4868, 4881, 4894, 4908, 4921, 4934, 4947, 4960, 4974, 4987, 5001, 5014, 5028, 5041, 5055, 5068, 5082, 5096, 5110, 5123, 5137, 5151, 5165, 5179, 5193, 5207, 5221, 5236, 5250, 5264, 5279, 5293, 5308, 5322, 5337, 5351, 5366, 5381, 5396, 5411, 5426, 5441, 5456, 5471, 5486, 5501, 5517, 5532, 5548, 5563, 5579, 5595, 5610, 5626, 5642, 5658, 5674, 5691, 5707, 5723, 5740, 5756, 5773, 5790};


static LookupTable calibration_shading_radial_r = { .ptr = _calibration_shading_radial_r, .rows = 1, .cols = sizeof(_calibration_shading_radial_r) / sizeof(_calibration_shading_radial_r[0]), .width = sizeof(_calibration_shading_radial_r[0] ) };
static LookupTable calibration_shading_radial_g = { .ptr = _calibration_shading_radial_g, .rows = 1, .cols = sizeof(_calibration_shading_radial_g) / sizeof(_calibration_shading_radial_g[0]), .width = sizeof(_calibration_shading_radial_g[0] ) };
static LookupTable calibration_shading_radial_b = { .ptr = _calibration_shading_radial_b, .rows = 1, .cols = sizeof(_calibration_shading_radial_b) / sizeof(_calibration_shading_radial_b[0]), .width = sizeof(_calibration_shading_radial_b[0] ) };
static LookupTable calibration_decompander0_mem = {.ptr = _calibration_decompander0_mem, .rows = 1, .cols = sizeof( _calibration_decompander0_mem ) / sizeof( _calibration_decompander0_mem[0] ), .width = sizeof( _calibration_decompander0_mem[0] )};
static LookupTable calibration_decompander1_mem = {.ptr = _calibration_decompander1_mem, .rows = 1, .cols = sizeof( _calibration_decompander1_mem ) / sizeof( _calibration_decompander1_mem[0] ), .width = sizeof( _calibration_decompander1_mem[0] )};

static LookupTable calibration_awb_scene_presets = {.ptr = _calibration_awb_scene_presets, .cols = 2, .rows = sizeof( _calibration_awb_scene_presets ) / sizeof( _calibration_awb_scene_presets[0] ), .width = sizeof( _calibration_awb_scene_presets[0][0] )};
static LookupTable calibration_light_src = {.ptr = _calibration_light_src, .cols = 2, .rows = sizeof( _calibration_light_src ) / sizeof( _calibration_light_src[0] ), .width = sizeof( _calibration_light_src[0][0] )};
static LookupTable calibration_rg_pos = {.ptr = _calibration_rg_pos, .rows = 1, .cols = sizeof( _calibration_rg_pos ) / sizeof( _calibration_rg_pos[0] ), .width = sizeof( _calibration_rg_pos[0] )};
static LookupTable calibration_bg_pos = {.ptr = _calibration_bg_pos, .rows = 1, .cols = sizeof( _calibration_bg_pos ) / sizeof( _calibration_bg_pos[0] ), .width = sizeof( _calibration_bg_pos[0] )};
static LookupTable calibration_mesh_rgbg_weight = {.ptr = _calibration_mesh_rgbg_weight, .cols = 15, .rows = sizeof( _calibration_mesh_rgbg_weight ) / sizeof( _calibration_mesh_rgbg_weight[0] ), .width = sizeof( _calibration_mesh_rgbg_weight[0][0] )};
static LookupTable calibration_mesh_ls_weight = {.ptr = _calibration_mesh_ls_weight, .cols = 15, .rows = sizeof( _calibration_mesh_ls_weight ) / sizeof( _calibration_mesh_ls_weight[0] ), .width = sizeof( _calibration_mesh_ls_weight[0][0] )};
static LookupTable calibration_mesh_color_temperature = {.ptr = _calibration_mesh_color_temperature, .cols = 15, .rows = sizeof( _calibration_mesh_color_temperature ) / sizeof( _calibration_mesh_color_temperature[0] ), .width = sizeof( _calibration_mesh_color_temperature[0][0] )};
static LookupTable calibration_wb_strength = {.ptr = _calibration_wb_strength, .rows = 1, .cols = sizeof( _calibration_wb_strength ) / sizeof( _calibration_wb_strength[0] ), .width = sizeof( _calibration_wb_strength[0] )};
static LookupTable calibration_sky_lux_th = {.ptr = _calibration_sky_lux_th, .rows = 1, .cols = sizeof( _calibration_sky_lux_th ) / sizeof( _calibration_sky_lux_th[0] ), .width = sizeof( _calibration_sky_lux_th[0] )};
static LookupTable calibration_ct_rg_pos_calc = {.ptr = _calibration_ct_rg_pos_calc, .rows = 1, .cols = sizeof( _calibration_ct_rg_pos_calc ) / sizeof( _calibration_ct_rg_pos_calc[0] ), .width = sizeof( _calibration_ct_rg_pos_calc[0] )};
static LookupTable calibration_ct_bg_pos_calc = {.ptr = _calibration_ct_bg_pos_calc, .rows = 1, .cols = sizeof( _calibration_ct_bg_pos_calc ) / sizeof( _calibration_ct_bg_pos_calc[0] ), .width = sizeof( _calibration_ct_bg_pos_calc[0] )};
static LookupTable calibration_color_temp = {.ptr = _calibration_color_temp, .rows = 1, .cols = sizeof( _calibration_color_temp ) / sizeof( _calibration_color_temp[0] ), .width = sizeof( _calibration_color_temp[0] )};
static LookupTable calibration_ct65pos = {.ptr = _calibration_ct65pos, .rows = 1, .cols = sizeof( _calibration_ct65pos ) / sizeof( _calibration_ct65pos[0] ), .width = sizeof( _calibration_ct65pos[0] )};
static LookupTable calibration_ct40pos = {.ptr = _calibration_ct40pos, .rows = 1, .cols = sizeof( _calibration_ct40pos ) / sizeof( _calibration_ct40pos[0] ), .width = sizeof( _calibration_ct40pos[0] )};
static LookupTable calibration_ct30pos = {.ptr = _calibration_ct30pos, .rows = 1, .cols = sizeof( _calibration_ct30pos ) / sizeof( _calibration_ct30pos[0] ), .width = sizeof( _calibration_ct30pos[0] )};
static LookupTable calibration_evtolux_ev_lut = {.ptr = _calibration_evtolux_ev_lut, .rows = 1, .cols = sizeof( _calibration_evtolux_ev_lut ) / sizeof( _calibration_evtolux_ev_lut[0] ), .width = sizeof( _calibration_evtolux_ev_lut[0] )};
static LookupTable calibration_evtolux_lux_lut = {.ptr = _calibration_evtolux_lux_lut, .rows = 1, .cols = sizeof( _calibration_evtolux_lux_lut ) / sizeof( _calibration_evtolux_lux_lut[0] ), .width = sizeof( _calibration_evtolux_lux_lut[0] )};
static LookupTable calibration_black_level_r = {.ptr = _calibration_black_level_r, .cols = 2, .rows = sizeof( _calibration_black_level_r ) / sizeof( _calibration_black_level_r[0] ), .width = sizeof( _calibration_black_level_r[0][0] )};
static LookupTable calibration_black_level_gr = {.ptr = _calibration_black_level_gr, .cols = 2, .rows = sizeof( _calibration_black_level_gr ) / sizeof( _calibration_black_level_gr[0] ), .width = sizeof( _calibration_black_level_gr[0][0] )};
static LookupTable calibration_black_level_gb = {.ptr = _calibration_black_level_gb, .cols = 2, .rows = sizeof( _calibration_black_level_gb ) / sizeof( _calibration_black_level_gb[0] ), .width = sizeof( _calibration_black_level_gb[0][0] )};
static LookupTable calibration_black_level_b = {.ptr = _calibration_black_level_b, .cols = 2, .rows = sizeof( _calibration_black_level_b ) / sizeof( _calibration_black_level_b[0] ), .width = sizeof( _calibration_black_level_b[0][0] )};
static LookupTable calibration_static_wb = {.ptr = _calibration_static_wb, .rows = 1, .cols = sizeof( _calibration_static_wb ) / sizeof( _calibration_static_wb[0] ), .width = sizeof( _calibration_static_wb[0] )};
static LookupTable calibration_mt_absolute_ls_a_ccm = {.ptr = _calibration_mt_absolute_ls_a_ccm, .rows = 1, .cols = sizeof( _calibration_mt_absolute_ls_a_ccm ) / sizeof( _calibration_mt_absolute_ls_a_ccm[0] ), .width = sizeof( _calibration_mt_absolute_ls_a_ccm[0] )};
static LookupTable calibration_mt_absolute_ls_d40_ccm = {.ptr = _calibration_mt_absolute_ls_d40_ccm, .rows = 1, .cols = sizeof( _calibration_mt_absolute_ls_d40_ccm ) / sizeof( _calibration_mt_absolute_ls_d40_ccm[0] ), .width = sizeof( _calibration_mt_absolute_ls_d40_ccm[0] )};
static LookupTable calibration_mt_absolute_ls_d50_ccm = {.ptr = _calibration_mt_absolute_ls_d50_ccm, .rows = 1, .cols = sizeof( _calibration_mt_absolute_ls_d50_ccm ) / sizeof( _calibration_mt_absolute_ls_d50_ccm[0] ), .width = sizeof( _calibration_mt_absolute_ls_d50_ccm[0] )};
static LookupTable calibration_shading_ls_a_r = {.ptr = _calibration_shading_ls_a_r, .rows = 1, .cols = sizeof( _calibration_shading_ls_a_r ) / sizeof( _calibration_shading_ls_a_r[0] ), .width = sizeof( _calibration_shading_ls_a_r[0] )};
static LookupTable calibration_shading_ls_a_g = {.ptr = _calibration_shading_ls_a_g, .rows = 1, .cols = sizeof( _calibration_shading_ls_a_g ) / sizeof( _calibration_shading_ls_a_g[0] ), .width = sizeof( _calibration_shading_ls_a_g[0] )};
static LookupTable calibration_shading_ls_a_b = {.ptr = _calibration_shading_ls_a_b, .rows = 1, .cols = sizeof( _calibration_shading_ls_a_b ) / sizeof( _calibration_shading_ls_a_b[0] ), .width = sizeof( _calibration_shading_ls_a_b[0] )};
static LookupTable calibration_shading_ls_tl84_r = {.ptr = _calibration_shading_ls_tl84_r, .rows = 1, .cols = sizeof( _calibration_shading_ls_tl84_r ) / sizeof( _calibration_shading_ls_tl84_r[0] ), .width = sizeof( _calibration_shading_ls_tl84_r[0] )};
static LookupTable calibration_shading_ls_tl84_g = {.ptr = _calibration_shading_ls_tl84_g, .rows = 1, .cols = sizeof( _calibration_shading_ls_tl84_g ) / sizeof( _calibration_shading_ls_tl84_g[0] ), .width = sizeof( _calibration_shading_ls_tl84_g[0] )};
static LookupTable calibration_shading_ls_tl84_b = {.ptr = _calibration_shading_ls_tl84_b, .rows = 1, .cols = sizeof( _calibration_shading_ls_tl84_b ) / sizeof( _calibration_shading_ls_tl84_b[0] ), .width = sizeof( _calibration_shading_ls_tl84_b[0] )};
static LookupTable calibration_shading_ls_d65_r = {.ptr = _calibration_shading_ls_d65_r, .rows = 1, .cols = sizeof( _calibration_shading_ls_d65_r ) / sizeof( _calibration_shading_ls_d65_r[0] ), .width = sizeof( _calibration_shading_ls_d65_r[0] )};
static LookupTable calibration_shading_ls_d65_g = {.ptr = _calibration_shading_ls_d65_g, .rows = 1, .cols = sizeof( _calibration_shading_ls_d65_g ) / sizeof( _calibration_shading_ls_d65_g[0] ), .width = sizeof( _calibration_shading_ls_d65_g[0] )};
static LookupTable calibration_shading_ls_d65_b = {.ptr = _calibration_shading_ls_d65_b, .rows = 1, .cols = sizeof( _calibration_shading_ls_d65_b ) / sizeof( _calibration_shading_ls_d65_b[0] ), .width = sizeof( _calibration_shading_ls_d65_b[0] )};
static LookupTable calibration_awb_warming_ls_a = {.ptr = _calibration_awb_warming_ls_a, .rows = 1, .cols = sizeof( _calibration_awb_warming_ls_a ) / sizeof( _calibration_awb_warming_ls_a[0] ), .width = sizeof( _calibration_awb_warming_ls_a[0] )};
static LookupTable calibration_awb_warming_ls_d50 = {.ptr = _calibration_awb_warming_ls_d50, .rows = 1, .cols = sizeof( _calibration_awb_warming_ls_d50 ) / sizeof( _calibration_awb_warming_ls_d50[0] ), .width = sizeof( _calibration_awb_warming_ls_d50[0] )};
static LookupTable calibration_awb_warming_ls_d75 = {.ptr = _calibration_awb_warming_ls_d75, .rows = 1, .cols = sizeof( _calibration_awb_warming_ls_d75 ) / sizeof( _calibration_awb_warming_ls_d75[0] ), .width = sizeof( _calibration_awb_warming_ls_d75[0] )};
static LookupTable calibration_noise_profile = {.ptr = _calibration_noise_profile, .rows = 1, .cols = sizeof( _calibration_noise_profile ) / sizeof( _calibration_noise_profile[0] ), .width = sizeof( _calibration_noise_profile[0] )};
static LookupTable calibration_demosaic = {.ptr = _calibration_demosaic, .rows = 1, .cols = sizeof( _calibration_demosaic ) / sizeof( _calibration_demosaic[0] ), .width = sizeof( _calibration_demosaic[0] )};
static LookupTable calibration_wdr_np_lut = {.ptr = _calibration_wdr_np_lut, .rows = 1, .cols = sizeof( _calibration_wdr_np_lut ) / sizeof( _calibration_wdr_np_lut[0] ), .width = sizeof( _calibration_wdr_np_lut[0] )};
static LookupTable calibration_gamma = {.ptr = _calibration_gamma, .rows = 1, .cols = sizeof( _calibration_gamma ) / sizeof( _calibration_gamma[0] ), .width = sizeof( _calibration_gamma[0] )};
static LookupTable calibration_iridix_asymmetry = {.ptr = _calibration_iridix_asymmetry, .rows = 1, .cols = sizeof( _calibration_iridix_asymmetry ) / sizeof( _calibration_iridix_asymmetry[0] ), .width = sizeof( _calibration_iridix_asymmetry[0] )};
static LookupTable calibration_ca_filter_mem = {.ptr = _calibration_ca_filter_mem, .rows = 1, .cols = sizeof( _calibration_ca_filter_mem ) / sizeof( _calibration_ca_filter_mem[0] ), .width = sizeof( _calibration_ca_filter_mem[0] )};
static LookupTable calibration_ca_correction = {.ptr = _calibration_ca_correction, .rows = 1, .cols = sizeof( _calibration_ca_correction ) / sizeof( _calibration_ca_correction[0] ), .width = sizeof( _calibration_ca_correction[0] )};
static LookupTable calibration_ca_correction_mem = {.ptr = _calibration_ca_correction_mem, .cols = 10, .rows = sizeof( _calibration_ca_correction_mem ) / sizeof( _calibration_ca_correction_mem[0] ), .width = sizeof( _calibration_ca_correction_mem[0][0] )};
static LookupTable calibration_lut3d_mem = {.ptr = _calibration_lut3d_mem, .rows = 1, .cols = sizeof( _calibration_lut3d_mem ) / sizeof( _calibration_lut3d_mem[0] ), .width = sizeof( _calibration_lut3d_mem[0] )};

uint32_t get_calibrations_static_fs_lin_ov13858( ACameraCalibrations *c )
{
    uint32_t result = 0;
    if ( c != 0 ) {
        c->calibrations[CALIBRATION_SHADING_RADIAL_R] = &calibration_shading_radial_r;
        c->calibrations[CALIBRATION_SHADING_RADIAL_G] = &calibration_shading_radial_g;
        c->calibrations[CALIBRATION_SHADING_RADIAL_B] = &calibration_shading_radial_b;
        c->calibrations[CALIBRATION_DECOMPANDER0_MEM] = &calibration_decompander0_mem;
        c->calibrations[CALIBRATION_DECOMPANDER1_MEM] = &calibration_decompander1_mem;
        c->calibrations[CALIBRATION_LIGHT_SRC] = &calibration_light_src;
        c->calibrations[CALIBRATION_RG_POS] = &calibration_rg_pos;
        c->calibrations[CALIBRATION_BG_POS] = &calibration_bg_pos;
        c->calibrations[CALIBRATION_MESH_RGBG_WEIGHT] = &calibration_mesh_rgbg_weight;
        c->calibrations[CALIBRATION_MESH_LS_WEIGHT] = &calibration_mesh_ls_weight;
        c->calibrations[CALIBRATION_MESH_COLOR_TEMPERATURE] = &calibration_mesh_color_temperature;
        c->calibrations[CALIBRATION_WB_STRENGTH] = &calibration_wb_strength;
        c->calibrations[CALIBRATION_SKY_LUX_TH] = &calibration_sky_lux_th;
        c->calibrations[CALIBRATION_CT_RG_POS_CALC] = &calibration_ct_rg_pos_calc;
        c->calibrations[CALIBRATION_CT_BG_POS_CALC] = &calibration_ct_bg_pos_calc;
        c->calibrations[CALIBRATION_COLOR_TEMP] = &calibration_color_temp;
        c->calibrations[CALIBRATION_CT65POS] = &calibration_ct65pos;
        c->calibrations[CALIBRATION_CT40POS] = &calibration_ct40pos;
        c->calibrations[CALIBRATION_CT30POS] = &calibration_ct30pos;
        c->calibrations[CALIBRATION_EVTOLUX_EV_LUT] = &calibration_evtolux_ev_lut;
        c->calibrations[CALIBRATION_EVTOLUX_LUX_LUT] = &calibration_evtolux_lux_lut;
        c->calibrations[CALIBRATION_BLACK_LEVEL_R] = &calibration_black_level_r;
        c->calibrations[CALIBRATION_BLACK_LEVEL_GR] = &calibration_black_level_gr;
        c->calibrations[CALIBRATION_BLACK_LEVEL_GB] = &calibration_black_level_gb;
        c->calibrations[CALIBRATION_BLACK_LEVEL_B] = &calibration_black_level_b;
        c->calibrations[CALIBRATION_STATIC_WB] = &calibration_static_wb;
        c->calibrations[CALIBRATION_MT_ABSOLUTE_LS_A_CCM] = &calibration_mt_absolute_ls_a_ccm;
        c->calibrations[CALIBRATION_MT_ABSOLUTE_LS_D40_CCM] = &calibration_mt_absolute_ls_d40_ccm;
        c->calibrations[CALIBRATION_MT_ABSOLUTE_LS_D50_CCM] = &calibration_mt_absolute_ls_d50_ccm;
        c->calibrations[CALIBRATION_SHADING_LS_A_R] = &calibration_shading_ls_a_r;
        c->calibrations[CALIBRATION_SHADING_LS_A_G] = &calibration_shading_ls_a_g;
        c->calibrations[CALIBRATION_SHADING_LS_A_B] = &calibration_shading_ls_a_b;
        c->calibrations[CALIBRATION_SHADING_LS_TL84_R] = &calibration_shading_ls_tl84_r;
        c->calibrations[CALIBRATION_SHADING_LS_TL84_G] = &calibration_shading_ls_tl84_g;
        c->calibrations[CALIBRATION_SHADING_LS_TL84_B] = &calibration_shading_ls_tl84_b;
        c->calibrations[CALIBRATION_SHADING_LS_D65_R] = &calibration_shading_ls_d65_r;
        c->calibrations[CALIBRATION_SHADING_LS_D65_G] = &calibration_shading_ls_d65_g;
        c->calibrations[CALIBRATION_SHADING_LS_D65_B] = &calibration_shading_ls_d65_b;
        c->calibrations[CALIBRATION_AWB_WARMING_LS_A] = &calibration_awb_warming_ls_a;
        c->calibrations[CALIBRATION_AWB_WARMING_LS_D50] = &calibration_awb_warming_ls_d50;
        c->calibrations[CALIBRATION_AWB_WARMING_LS_D75] = &calibration_awb_warming_ls_d75;
        c->calibrations[CALIBRATION_NOISE_PROFILE] = &calibration_noise_profile;
        c->calibrations[CALIBRATION_DEMOSAIC] = &calibration_demosaic;
        c->calibrations[CALIBRATION_WDR_NP_LUT] = &calibration_wdr_np_lut;
        c->calibrations[CALIBRATION_GAMMA] = &calibration_gamma;
        c->calibrations[CALIBRATION_IRIDIX_ASYMMETRY] = &calibration_iridix_asymmetry;
        c->calibrations[CALIBRATION_AWB_SCENE_PRESETS] = &calibration_awb_scene_presets;
        c->calibrations[CALIBRATION_CA_FILTER_MEM] = &calibration_ca_filter_mem;
        c->calibrations[CALIBRATION_CA_CORRECTION] = &calibration_ca_correction;
        c->calibrations[CALIBRATION_CA_CORRECTION_MEM] = &calibration_ca_correction_mem;
        c->calibrations[CALIBRATION_LUT3D_MEM] = &calibration_lut3d_mem;
    } else {
        result = -1;
    }
    return result;
}
